【问题标题】:Problem creating Rails 3 Engine创建 Rails 3 引擎的问题
【发布时间】:2010-09-17 16:26:42
【问题描述】:

我正在创建我的第一个 Rails 3 引擎,目前收到以下错误消息

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

为了让您了解更多背景知识,我并没有将引擎作为 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

建议?

【问题讨论】:

  • 您究竟为什么要尝试将引擎放入供应商/插件中?不将其开发为宝石的原因是什么?为什么不直接发展为宝石?
  • 我可以那样做。没有什么特别的原因我不这样做,只是认为它是为了以任何一种方式工作?

标签: ruby-on-rails ruby ruby-on-rails-3 rails-engines


【解决方案1】:

我想我记得读过 Railties 不能在插件目录中工作,因为它们打算在应用程序启动过程中的不同点加载。我会建议使用像 Jeweler 这样的工具来创建宝石,它可以为您完成很多工作。 Railtie/Engine 的目的是拥有一个可重用的组件,可以包含在多个 Rails 应用程序中。创建 gem 后,您可以指向 Gemfile 中的本地 gem 路径。这使您可以在 Rails 应用程序中查看引擎代码的更改,而无需在每次更改引擎代码时都构建和重新安装 gem。当然,您希望将 bundler 指向生产中已安装的 gem。我建议将它放在 github 上,并在生产中使用 Gemfile 中的 URL。

Bundler 本地 gem 示例:

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

查看 Modern 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】:

    John,我相信引擎(通常是 gem)与插件(存在于供应商中)是在 Rails 初始化过程中的不同点加载的。

    引擎实际上有更多的灵活性,它们可以更深地连接到轨道上。此外,打包为 gem 有很多优点:更易于跨应用共享、更易于在单独的代码仓库中维护、更易于版本控制。

    我现在正在创建我的第一个 Rails 引擎,并创建了一个有用的起点和入门指南:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多