Rails.root - неинициализированная константа - PullRequest
0 голосов
/ 11 сентября 2018

Я пишу сценарий, расположенный в /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.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018
You can try with

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

В противном случае вы можете использовать

rails r # {имя_файла} .rb указать имя файла

0 голосов
/ 11 сентября 2018

Запуск с $ rails runner bin/my_class.rb. Вы можете узнать больше о рельсах бегун здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...