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


В файле 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>'

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

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

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

Ruby / Rails - всякий раз, когда gem - Loop cron tasks

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

Благодаря, Sudhir C.N.


9


источник


Ответы:


Всякий раз, когда не требуется или зависит от Rails вообще, поэтому, когда он запускается, RAILS_ROOT не определяется, однако, поскольку всякий раз, когда schedule.rb обычно хранится в /config/schedule.rb, мы можем сделать предположение, что он находится в рельсах проект, и установите наш собственный 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")

28



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

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

set :output, "#{path}/log/cron.log"

18



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

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

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


3