是否可以在应用程序中包含的 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 并不意味着您不能访问全局命名空间。唯一需要担心的是,如果您的 Gem 在初始化期间设置 Rails 模块之前使用该访问权限。如果您发现这是问题所在,请发布您正在使用的代码及其所在位置,我们很乐意帮助您调试问题。