构建在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
答案 0 :(得分:1)
我从来没有这样做,但我在其他类似的案例中看到了类似的事情
require "hide_heroku/railtie" if Object.const_defined?(Rails)
所以如果定义了Rails,这只需要你的铁路