繁体   English   中英

创建可以在Rails或不与Rails一起工作的gem

[英]Creating gem that works with or without Rails

构建可在Rails环境中使用或不使用Rails环境的gem的惯例是什么?

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

在这个答案中, https: //stackoverflow.com/a/2072169/165673 @SimoneCarletti暗示了这一点:

如果您将插件打包为Gem,则可以在非Rails项目中重复使用它,并使用init.rb文件提供特定于Rails的初始化。 Non-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

我从没做过,但在其他类似案例中也看到过类似的内容

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

因此,仅在定义Rails时才需要您的railtie

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM