创建与Rails一起使用或不使用Rails的gem

时间:2013-09-27 21:46:56

标签: ruby-on-rails ruby gem

构建在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

1 个答案:

答案 0 :(得分:1)

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

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

所以如果定义了Rails,这只需要你的铁路