Ruby on rails Rails.root-未初始化常量

Ruby on rails Rails.root-未初始化常量,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在写一个位于rails 5项目的/bin中的脚本。基本上,我尝试遍历各种文件和路径。帮助我完成这项工作的是Rails.root,因此我不必担心相对路径等问题 问题是,当我试图在脚本中使用Rails.root时,出现了一个错误: 未初始化的常量Rails(NameError) 我的脚本看起来像这样 bin/my_class.rb class MyClass def initialize ... end def my_function ... Rails.r

我正在写一个位于rails 5项目的
/bin
中的脚本。基本上,我尝试遍历各种文件和路径。帮助我完成这项工作的是
Rails.root
,因此我不必担心相对路径等问题

问题是,当我试图在脚本中使用
Rails.root
时,出现了一个错误:

未初始化的常量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\u check.rb foo=bar

它在我呼叫Rails.root的线路上中断,并显示错误消息:

未初始化的常量Rails(NameError)

我试过了

  • 将Rails.root移动到类上方的一个常量(可能是名称冲突还是其他原因?)。没用
  • 将名称更改为
    ::Rails.root.to\s
    。也不管用
有人知道为什么我无法访问脚本中的
Rails.root

编辑 我可以通过添加

require File.expand_path(File.join(File.dirname(uuu File_uuu))、“…”、“config”、“environment”)

到我的脚本的顶端。这将加载轨道。默认情况下,脚本速度较慢,我不太喜欢只为了使用
rails.root
而加载所有rails,但现在它可以工作了


其他解决方案,如下面的答案,要么使用
railsrunner
运行脚本,要么将所有内容包装到rake任务中

使用
$rails runner bin/my_class.rb运行。您可以了解有关rails runner的更多信息

你还可以用别的方法


rails r#{file_name}.rb指定文件名

可能是因为运行
ruby bin/template_check.rb foo=bar时未加载rails?您是否考虑过让它成为<代码> RAKE/CONT>任务,以便加载Rails?与我一起工作的人想要一个bin脚本,因为它将来将如何使用。我可以通过在文件顶部添加
require File.expand\u path(File.join(File.dirname(\uuuu File\uuuu),“…”,“,”config“,”environment“)
来实现这一点。然而,启动确实需要一秒钟,所以可能有更好的方法来实现这一点。我将记住rake任务选项。
You can try with

rails r bin/my_class.rb  if your file is under bin