2010-09-17 47 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/