[英]Rails: You cannot have more than one Rails::Application (RuntimeError)
[英]Can you add more than one local engine to a Rails 3 app?
我正在嘗試將幾種可重用的應用程序功能分解為Rails引擎。 我完全可以讓一個引擎正常工作,但該應用程序似乎沒有從后續引擎加載數據。 我正在同時開發多個引擎,因此我需要使用:path選項將它們放入我的testapp的gemfile中。
這是我的(簡化的)設置(我對使用簡單模型設置引擎的最低要求的理解):
my_engines / engine1 / lib / engine1.rb:
module Engine1
require 'engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
end
my_engines / engine1 / lib / engine.rb:
require 'engine1'
require 'rails'
module Engine1
class Engine < Rails::Engine
end
end
my_engines / engine1 / app / models / engine1 / model1.rb:
module Engine1
class Model1
end
end
我的第二個引擎engine2設置相同且位於同一父目錄中(只是名稱為engine2和模型model2)。
我正在使用jeweler打包並為兩個引擎生成gemspec,並且在測試應用程序中需要兩個引擎,如下所示:
my_engines / testapp / Gemfile:
gem 'engine1', :path => '../engine1'
gem 'engine2', :path => '../engine2'
奇怪的是,當我啟動testapp的rails控制台時,Engine1 :: Model1.new可以工作,但是Engine1 :: Model1.new會導致“ NameError:未初始化的常量Engine2 :: Model2”。 對於包括在任何后續引擎中的所有模型,路線,控制器等,這似乎都是正確的。 我搜尋了互聯網無濟於事。 有什么想法嗎?
我想我已經知道了。 以防萬一其他人碰巧正在使用Rails3引擎(強烈建議),並遇到此問題(希望不是),問題在於我的engine.rb文件和engine_name.rb文件並排放置了,放在lib目錄中。 解決方案是在lib中創建一個engine_name目錄,並將您的engine.rb文件放在那里(我猜Rails只加載它在gem或插件的lib目錄中找到的第一個engine.rb文件)。 所以...
/some_engine
|-- lib
|-- some_engine.rb
|-- engine.rb
/some_engine
|-- lib
|-- some_engine.rb
|-- some_engine
|-- engine.rb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.