всякий раз, когда файл gem schedule.rb: не распознает переменную RAILS_ROOT - PullRequest
9 голосов
/ 02 ноября 2011

В файле schedule.rb оператор:

require "#{RAILS_ROOT}/config/environment.rb"

 every "10 10 2 * * *" do
      command "mysqldump -u #{@db_username} -p#{@db_password} --single-transaction #{@db_name} > #{@backup_Path}/#{@db_name}.sql 2> log/error_crontab.log"
 end

Когда я пытаюсь выполнить команду cmd с терминала, появляется следующая ошибка:

 config/schedule.rb:48:in `initialize': uninitialized constant Whenever::JobList::RAILS_ROOT (NameError)
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `instance_eval'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `initialize'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `new'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `cron'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:40:in `run'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:7:in `execute'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/bin/whenever:38:in `<top (required)>'
    from /usr/local/bin/whenever:19:in `load'
    from /usr/local/bin/whenever:19:in `<main>'

Я используюТребуется оператор, чтобы получить динамические значения из формы для планирования задания.Помогите, пожалуйста, решить эту проблему?

Примечание. Я видел следующие запросы stackoverflow: Как обнаружить среду Rails внутри всякий раз, когда

Следуя этому потоку, чтобы получить динамические значения,но сталкивается с проблемой с требованием заявления Rails - Всякий раз, когда gem - Динамические значения

Ruby / Rails - Всякий раз, когда gem - Цикл задач cron

файл конфигурации в schedule.rbс рельсами Всякий раз, когда драгоценный камень?

Ответы [ 3 ]

28 голосов
/ 02 ноября 2011

Всякий раз, когда вообще не требуется или не зависит от Rails, поэтому, когда он запускается, RAILS_ROOT не определяется, однако, поскольку всякий раз, когда schedule.rb обычно хранится в /config/schedule.rb, мы можем предположить, что это в проекте rails и установите наш собственный RAILS_ROOT так:

# in schedule.rb
RAILS_ROOT = File.dirname(__FILE__) + '/..'

Редактировать: если вам действительно нужны загруженные Rails, сделайте следующее:

# in schedule.rb
# this will require config/environment and load your entire rails environment
require File.expand_path(File.dirname(__FILE__) + "/environment")
18 голосов
/ 24 января 2013

Каждый раз, когда разработчик уже ответил на этот вопрос, проверьте это https://github.com/javan/whenever/issues/81

Javan Всякий раз, когда больше не пытается загрузить вашу среду Rails. Тем не менее, он автоматически устанавливает переменную пути в каталог при каждом запуске из. Это должно работать точно так же:

set :output, "#{path}/log/cron.log"
3 голосов
/ 15 апреля 2016

В Rails 4 попробуйте с:

require File.expand_path(File.dirname(__FILE__) + "/../config/environment")

в вашем файле schedule.rb. Таким образом, у вас также есть доступ ко всем моделям активной инициализации и инициализаторам.

...