Как правильно указать путь к "приложению" в плагине Rails?

Этот вопрос возник из-за того, что гем cells указывает каталоги шаблонов с помощью File.join ('app','elements'). Это прекрасно работает, пока вы не запустите Rails как демон (scripts / server -d). Демон переключает каталоги в /, что оставляет пути к шаблонам ячеек, указывающие на неправильный абсолютный путь.

Мое решение состояло в том, чтобы установить пути по умолчанию к File.join(RAILS_ROOT, 'приложение','ячейки'). Это работает в Rails, но модульные тесты для плагина терпят неудачу, потому что RAILS_ROOT не определен. С помощью File.join(File.dirname(__FILE__),'..'... также работает, но требует около 6 уровней "..", что кажется неправильным.

Поэтому мой вопрос заключается в том, как правильно указать путь к каталогу в разделе "app" в плагине Rails? Или что-то еще не так, что демонизирующий Rails не может найти относительные пути?

2 ответа

Решение

Я предлагаю перенести ваши изменения из плагина в инициализатор. В инициализаторе переопределите метод, который использует File.join ("приложение", "ячейки"). Это имеет несколько преимуществ.

  1. Вы не изменяете сторонний код напрямую, поэтому вам, скорее всего, не придется беспокоиться о повторном применении изменений при обновлении.
  2. Не изменяя сам плагин, юнит-тесты плагина все равно пройдут.
  3. Вы можете использовать RAILS_ROOT, который я считаю правильным решением.

Для тех, у кого были проблемы с расшифровкой этого ответа, вот что сработало для меня:

Создайте файл config/initializers/cell.rb

в него вкладывают:

Cell::Base.view_paths=[
  File.join(RAILS_ROOT, 'app', 'cells'),
  File.join(RAILS_ROOT, 'app', 'cells', 'layouts')
]

Надеюсь это поможет

Другие вопросы по тегам