0

在 Rails 环境中或没有 Rails 环境中构建 gem 的惯例是什么?

例如,我刚刚创建了hide_heroku gem,它本质上是一个 Rack 中间件。然后我添加了一个 Railtie 类,以便它可以在 Rails 环境中自动加载执行,但现在如果我转身尝试将它包含在 Nesta 应用程序中,我会得到一个错误,它无法加载 rails ...

在这个答案中https://stackoverflow.com/a/2072169/165673 @SimoneCarletti 暗示了这种情况:

如果您将插件打包为 Gem,您可以在非 Rails 项目中重用它,并使用 init.rb 文件提供特定于 Rails 的初始化。非 Rails 应用程序将简单地忽略它。

但这是一个旧答案,我不确定他在说什么。最好的方法是什么?

hide_heroku.rb:

require "rack/hide_heroku"
require "hide_heroku/railtie"

module HideHeroku
end

hide_heroku/railtie.rb:

require "rails"

module HideHeroku
  class Railtie < ::Rails::Railtie

    config.before_configuration do
      Rails.application.config.middleware.use Rack::HideHeroku  
    end

  end
end
4

1 回答 1

1

我从来没有这样做过,但我在其他类似案例中看到过类似的情况

require "hide_heroku/railtie" if Object.const_defined?(Rails) 

因此,如果定义了 Rails,这将只需要您的 railtie

于 2013-09-27T22:08:08.933 回答