[英]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.