Rails.root-未初始化的常量

时间:2018-09-10 23:36:11

标签: ruby-on-rails ruby

我正在编写位于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.root加载所有rails的忠实粉丝,但目前它可以工作。

其他解决方案(例如下面的答案)是使用rails runner运行脚本,或将所有内容包装在rake任务中。

2 个答案:

答案 0 :(得分:0)

运行$ rails runner bin/my_class.rb。您可以找到有关RailsRunner here

的更多信息

答案 1 :(得分:0)

You can try with

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

否则,您可以使用

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