Joh*_*ing 5 ruby ruby-on-rails rails-engines ruby-on-rails-3
我正在创建我的第一个Rails 3引擎,我目前收到以下错误消息
is a Railtie/Engine and cannot be installed as plugin (RuntimeError)
Run Code Online (Sandbox Code Playgroud)
为了给你更多的背景,我没有将引擎作为gem,但我将引擎文件放在vendor/plugins文件夹中.我知道在插件文件夹中加载时存在问题,但我不清楚如何解决问题.
我在Engine中的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
Run Code Online (Sandbox Code Playgroud)
建议?
我想我记得读过 Railties 在插件目录中不起作用,因为它们旨在在应用程序启动过程中的不同点加载。我建议使用 Jeweler 之类的工具创建宝石,它可以为您完成很多工作。Railtie/Engine 的目的是拥有一个可以包含在多个 Rails 应用程序中的可重用组件。创建 gem 后,您可以指向 Gemfile 中的本地 gem 路径。这使您可以在 Rails 应用程序内查看引擎代码的更改,而无需在每次更改引擎代码时构建并重新安装 gem。当然,您希望将捆绑程序指向生产中已安装的 gem。我建议将其放在 github 上并在生产中的 Gemfile 中使用该 URL。
捆绑器本地 gem 示例:
#Gemfile
gem "my_engine", :require => "my_engine", :path => "/my_engines/my_engine"
Run Code Online (Sandbox Code Playgroud)
查看 Modern Rubyist 的网站。他有一个关于创建 Railties 和 Engine 的精彩系列。自本文编写以来,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/