簡體   English   中英

您可以在Rails 3應用程序中添加多個本地引擎嗎?

[英]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文件)。 所以...

錯誤(僅在主機應用程序中加載一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM