Я разрабатываю драгоценный камень/двигатель. Как мне сделать это, связывая его в тестовом RailsApp из источника:Неинициализированная константа в My :: Двигатель после смены файла
# Gemfile
gem 'my-engine', path: '../local/path/to/gem'
Это прекрасно работает до сих пор.
Но после того, как я изменил файл в своем драгоценном камне (например, добавьте пробел или разрыв), Двигатель выгружается. Причинение следующее сообщение об ошибке:
uninitialized constant My::Engine
Это ошибка возникает в файле, который делает первый вызов My::Engine
. (Мне нужно вызвать это, чтобы получить корень: My::Engine.root
) Если я удалю эту строку, ошибки не будет, но будет отображаться только пустая страница, и это происходит потому, что все изменения моего SQL и никакого содержимого загружаются из базы данных , Я думаю, что это происходит потому, что файлы в директории lib
выгружается, потому что в этих файлах я динамически создавать активную запись модель ..
Я уже проверил autoload_paths
и watchable_dirs
:
# engine.rb
module My
class Engine < Rails::Engine
engine_name 'my-engine'
initializer "my-engine.load_config" do |app|
app.config.autoload_paths += %W(#{Engine.root}/lib)
app.config.watchable_dirs["#{Engine.root}/lib"] = [:rb]
end
end
end
Я не уверен, что я реализую их правильно, но они, похоже, не решают моих проблем так, как я их использую.
Мне интересно узнать ответы. У меня была такая же проблема с разработкой движка. Моим «решением» было сделать что-то вроде 'require 'my'' в' application.rb' моего main_app (приложение-рельсы хоста, а не движок). Это сработало для меня, но не похоже, что это необходимо. –
Спасибо за подсказку, я попробую это на данный момент .. Но должен быть лучший способ. –