Rails.root - 未初始化的常量



我正在编写一个位于 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运行。您可以在此处找到有关导轨运行器的更多信息

最新更新