Я пишу сценарий, расположенный в /bin
проекта rails 5. В основном я пытаюсь перебрать различные файлы и пути. Что-то, что может помочь мне в этом усилии, это Rails.root
, поэтому мне не нужно беспокоиться об относительных путях и т. Д.
Проблема в том, что когда я пытаюсь использовать Rails.root
в своем скрипте, я получаю сообщение об ошибке:
uninitialized constant Rails (NameError)
Мой скрипт выглядит примерно так
бен / 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 runner
для запуска скрипта, либо обернуть все в задачу rake.