2013-06-24 3 views
2

Я разрабатываю драгоценный камень/двигатель. Как мне сделать это, связывая его в тестовом 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 

Я не уверен, что я реализую их правильно, но они, похоже, не решают моих проблем так, как я их использую.

+0

Мне интересно узнать ответы. У меня была такая же проблема с разработкой движка. Моим «решением» было сделать что-то вроде 'require 'my'' в' application.rb' моего main_app (приложение-рельсы хоста, а не движок). Это сработало для меня, но не похоже, что это необходимо. –

+0

Спасибо за подсказку, я попробую это на данный момент .. Но должен быть лучший способ. –

ответ

0

Я думаю, вам может потребоваться «my/engine» перед вызовом My :: Engine.root или изменить порядок ваших запросов, чтобы «my/engine» был необходим до файла, который вызывает вызов Мой :: Engine.