2010-09-17 49 views
5

我正在建立第一個Rails 3的發動機,目前我收到以下錯誤消息問題產生的Rails 3引擎

is a Railtie/Engine and cannot be installed as plugin (RuntimeError) 

爲了給你多一點背景,我不是做引擎作爲一個寶石,但我已經將引擎文件放置在供應商/插件文件夾中。我知道在插件文件夾中加載時存在問題,但我不清楚如何解決問題。在發動機

我的Rails/init.rb文件具有下面的代碼

require 'rails' 

module RailsApp 
    module MyEngine 
    class Engine < Rails::Engine 

     config.after_initialize do 
     RailsApp::GameType.register do |game_type| 
      game_type.name = "TreasureIsland" 
      game_type.version = "0.1" 
      game_type.thumbnail = "teasure_island.jpg" 
     end 
     end 
    end 
    end 
end 

建議?

+0

爲什麼你到底是試圖把在供應商/插件引擎?沒有把它發展成寶石的原因是什麼?爲什麼不只是發展成寶石? – johnmcaliley 2010-09-17 17:32:10

+0

我可以這樣做。沒有特別的原因,我沒有這樣做,但只是認爲它的目的是以任何方式工作? – 2010-09-18 09:48:14

回答

2

我想我記得讀過Railties不能在插件目錄下工作,因爲他們打算在應用程序啓動過程的不同位置加載。我建議使用珠寶商這樣的東西來創造一個寶石,珠寶商會爲你做很多工作。 Railtie/Engine的目的是要有一個可重用的組件,可以包含在多個rails應用程序中。一旦你創建了一個寶石,你可以指向你的Gemfile中的本地寶石路徑。這使您可以在您的Rails應用程序中查看引擎代碼的更改,而無需在每次更改引擎代碼時都構建並重新安裝該Gem。當然,你會想要將bundler指向生產中已安裝的gem。我建議將它放在github上,並在生產中的Gemfile中使用該URL。

捆紮機本地寶石例如:

#Gemfile 
gem "my_engine", :require => "my_engine", :path => "/my_engines/my_engine" 

退房現代Rubyist的網站。他在創建Railties和Engines方面有很好的系列。自寫完以後,Rails可能會發生一些變化,但我認爲它大部分仍然相關。它幫了我一個好一點的時候,我學習如何編寫發動機使用Rails 3

http://www.themodestrubyist.com/2010/03/01/rails-3-plugins---part-1---the-big-picture/
http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/
http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/
http://www.themodestrubyist.com/2010/03/22/rails-3-plugins---part-4---more-on-generators/

2

約翰,我相信引擎(這是典型的寶石)VS插件(住在供應商中)在軌道初始化過程中的不同點加載。

發動機實際上有更多的靈活性,他們可以更深地勾入導軌。另外,包裝作爲寶石有很多優點:更容易在應用程序間共享,更容易維護在一個單獨的代碼回購,更容易的版本控制。

我現在創建我的第一個軌道的發動機,創造了一個有用的出發點和步行通過入門:

http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/