Rails — Как избежать дублирования между разными приложениями

Это может показаться довольно широким вопросом, но я искал и не нашел способов избежать дублирования между разными приложениями. Только внутри приложения.

Я работаю с тремя разными приложениями rails в течение некоторого времени. Время от времени я занимаюсь рефакторингом некоторых файлов, таких как мой icons_helper.rb. Когда я закончу. Это лучше, чем раньше, но отличается от того же файла в двух моих других приложениях для рельсов.

Другие типичные примеры дублированного кода:

  • Стили
  • Макеты
  • Сообщения (уведомления, оповещения, ...)
  • И Т. Д.

Что мне делать, чтобы избежать этого дублирования между приложениями? Является ли написание драгоценного камня, который обертывает эти файлы, лучшим выбором?


person Mauricio Moraes    schedule 29.07.2015    source источник


Ответы (2)


Это просто, сделайте свой собственный драгоценный камень. Вы можете оставить его закрытым (используйте git: 'git location') или сделать его открытым и использовать rubygems.

Вы можете начать с bundle gem yourgem, и это очень хорошая статья о как создать свой первый гем

Вы управляете этим как совершенно отдельным проектом. Мы делаем это в нашей компании, и это отлично работает

Обновление 1

Как было сказано, вы наверняка хотите иметь тесты в своем геме. Это не замедлит отладку: ошибки, вызванные гемом, отображаются как gemname/file_in_gem:line_number, так что вы все равно легко обнаружите проблемы. Кроме того, если вы следуете хорошей практике тестирования, вам не следует тестировать гем в других приложениях: гем уже протестирован в своей собственной кодовой базе.

Вы можете проверить эту статью о разделении приложения rails во множество суб-движков. Очевидно, что это экстремальный подход, который даст хорошие результаты только в очень больших проектах и ​​больших командах, но он показывает вам, что на самом деле это хорошая идея разделить приложение Rails.

person Francesco Belladonna    schedule 29.07.2015
comment
Не замедляет ли это отладку? Я имею в виду, искать проблему, переключаться на проект gem, искать внутри, изменять, тестировать другие 2 приложения после каждого изменения? - person Mauricio Moraes; 29.07.2015
comment
Во-первых, вы хотите, чтобы в вашем геме были тесты, это точно. Но это не замедляет отладку: ошибки, вызванные гемом, отображаются как gemname/file_in_gem:line_number, так что вы все равно легко найдете проблемы. Кроме того, если вы следуете методике тестирования, вам не следует тестировать гем в двух других приложениях, которые уже протестированы в самом гем. Что касается переключения проектов, мой редактор поддерживает быстрое переключение с помощью ctrl+alt+p, так что меня никогда не прерывают. - person Francesco Belladonna; 29.07.2015
comment
Я понимаю. Можете ли вы обновить свой ответ этими комментариями о тестировании? Кстати, ссылка, которую вы предоставили, хороша. - person Mauricio Moraes; 29.07.2015
comment
Готово, добавил еще и хорошую статью о компании, которая довела ее до максимума, разбив все приложение на поддвижки: tech.taskrabbit.com/blog/2014/02/11/rails-4-engines (очень интересная статья) - person Francesco Belladonna; 30.07.2015

Если вы хотите повторно использовать код в нескольких приложениях, я предлагаю извлечь этот код в Gem и потребовать этот Gem в каждом приложении.

person spickermann    schedule 29.07.2015