Можете ли вы добавить более одного локального движка в приложение Rails 3? - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь разбить несколько частей многоразовой функциональности приложения на движки Rails. У меня нет проблем с тем, чтобы заставить работать один движок, но приложение, похоже, не загружает данные из последующих движков. Я разрабатываю несколько движков одновременно, поэтому мне нужно, чтобы они были включены в gem-файл моего testapp с опцией: path.

Вот моя (упрощенная) настройка (мое понимание минимума установки двигателя с простой моделью):

my_engines / engine1 / Библиотека / engine1.rb:

module Engine1
require 'engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
end

my_engines / engine1 / Библиотека / engine.rb:

require 'engine1'
require 'rails'

module Engine1
class Engine < Rails::Engine

end
end

my_engines / engine1 / приложение / модели / engine1 / model1.rb:

module Engine1
    class Model1
    end
end

Мой второй Engine, engine2 настроен идентично и находится в том же родительском каталоге (только с именем engine2 и моделью model2).

Я использую ювелир для упаковки и генерации gemspecs для обоих двигателей, и мне требуются оба двигателя в тестовом приложении, например так:

my_engines / TestApp / Gemfile:

gem 'engine1', :path => '../engine1'
gem 'engine2', :path => '../engine2'

Странная вещь в том, что когда я запускаю консоль rails для моего testapp, Engine1 :: Model1.new работает, но Engine1 :: Model1.new приводит к «NameError: неинициализированная константа Engine2 :: Model2». Кажется, это верно для всех моделей, маршрутов, контроллеров и т. Д., Которые я включаю в любые последующие движки. Я почесал интернет безрезультатно. Есть мысли?

1 Ответ

1 голос
/ 14 апреля 2011

Я думаю, я понял это.На тот случай, если кто-то еще играет с движками Rails3 (очень рекомендуется) и сталкивается с этой проблемой (надеюсь, что нет), проблема заключалась в том, что мой файл engine.rb и мои файлы engine_name.rb сидели рядомсторона в lib dir.Решение состоит в том, чтобы создать каталог engine_name в lib и поместить туда файл engine.rb (я полагаю, что Rails загружает только первый файл engine.rb, найденный в gem или lib dir плагина).Итак ...

Плохо (загружает только один engine.rb в хост-приложение):

/some_engine 
   |-- lib 
   |-- some_engine.rb 
   |-- engine.rb 

Кажется, работает:

/some_engine 
   |-- lib 
   |-- some_engine.rb 
   |-- some_engine 
       |-- engine.rb 
...