アプリに含まれているgemのコードでアプリケーションのRailsファイルシステムルートを知ることは可能ですか?
これはgemソースのサンプルです:
module MyGem
def self.included(base)
puts Rails.root # return nil
end
end
ActionController::Base.send :include, MyGem
私の貧弱な英語に感謝し、申し訳ありません
アプリに含まれているgemのコードでアプリケーションのRailsファイルシステムルートを知ることは可能ですか?
これはgemソースのサンプルです:
module MyGem
def self.included(base)
puts Rails.root # return nil
end
end
ActionController::Base.send :include, MyGem
私の貧弱な英語に感謝し、申し訳ありません
これと同様の問題を修正するために私が見つけた解決策は、railtie初期化子を使用してモジュールを含めることです。
だから、あなたの/lib/mygem/railtie.rbで
module MyGem
class Railtie < Rails::Railtie
initializer "Include your code in the controller" do
ActiveSupport.on_load(:action_controller) do
include MyGem
end
end
end
このコードを使用すると、ActionControllerがロードされた後にモジュールが含まれ、Rails.rootを使用できるようになります。
これがあなたのために働くかどうか私に知らせてください。
もちろん:
Rails.root
gemを作成しているからといって、グローバル名前空間にアクセスできないわけではありません。唯一の懸念は、初期化中にRailsモジュールがセットアップされる前にGemがそのアクセスを使用するかどうかです。それが問題であることがわかった場合は、使用しているコードをその場所に投稿してください。問題のデバッグを喜んでお手伝いします。