Ruby on rails Rails.root-未初始化常量
我正在写一个位于rails 5项目的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
/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