Как правильно указать путь к "приложению" в плагине 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 ("приложение", "ячейки"). Это имеет несколько преимуществ.
- Вы не изменяете сторонний код напрямую, поэтому вам, скорее всего, не придется беспокоиться о повторном применении изменений при обновлении.
- Не изменяя сам плагин, юнит-тесты плагина все равно пройдут.
- Вы можете использовать RAILS_ROOT, который я считаю правильным решением.
Для тех, у кого были проблемы с расшифровкой этого ответа, вот что сработало для меня:
Создайте файл config/initializers/cell.rb
в него вкладывают:
Cell::Base.view_paths=[
File.join(RAILS_ROOT, 'app', 'cells'),
File.join(RAILS_ROOT, 'app', 'cells', 'layouts')
]
Надеюсь это поможет