簡體   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