我正在编写一个位于 rails 5 项目/bin
的脚本。基本上,我正在尝试遍历各种文件和路径。Rails.root
可以帮助我完成这项工作的东西,所以我不必担心相对路径等
问题是,当我尝试在脚本中使用Rails.root
时,出现错误:
uninitialized constant Rails (NameError)
我的脚本看起来像这样
bin/my_class.rb
class MyClass
def initialize
...
end
def my_function
...
Rails.root.to_s
end
end
MyClass.new.my_function
然后我像这样称呼我的脚本
ruby bin/template_check.rb foo=bar
它在我用错误消息调用Rails.root
的线路上中断:
uninitialized constant Rails (NameError)
我试过了
- 将 Rails.root 移动到类上方的常量(认为可能是名称冲突或其他什么?(。 不起作用
- 将名称更改为
::Rails.root.to_s
也不起作用。
有谁知道为什么我无法访问脚本中的Rails.root
?
编辑我能够通过添加来解决此问题
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
到我的脚本顶部。这将加载导轨。默认情况下,脚本较慢,而且我不太喜欢加载所有 rails 只是为了使用Rails.root
,但现在它可以工作。
其他解决方案(如下面的答案(是使用rails runner
运行脚本,或者将所有内容包装在 rake 任务中。
You can try with
rails r bin/my_class.rb if your file is under bin
您可以使用的其他明智
rails r #{file_name}.rb 指定文件名
使用$ rails runner bin/my_class.rb
运行。您可以在此处找到有关导轨运行器的更多信息