是否可以在应用程序中包含的gem代码中了解应用程序的Rails文件系统根目录?
这是宝石来源的一个样本:
module MyGem
def self.included(base)
puts Rails.root # return nil
end
end
ActionController::Base.send :include, MyGem
感谢和抱歉我的英语不好
答案 0 :(得分:7)
我发现解决类似问题的解决方案是使用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
请告诉我这是否适合您。
答案 1 :(得分:2)
当然:
Rails.root
仅仅因为您正在编写gem并不意味着您无法访问全局命名空间。唯一需要关注的是,如果您的Gem在初始化期间设置Rails模块之前使用了该访问权限。如果您发现问题所在,请发布您正在使用的代码,它在哪里,我们很乐意帮助您调试此问题。