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