системный вызов ruby ​​для перезапуска отложенной работы не выполняется - PullRequest
0 голосов
/ 07 июля 2011

Мои отложенные рабочие процессы, кажется, случайно исчезают, я работаю над более долгосрочным исправлением для этого, но в то же время, я думаю, просто перезапустить их, когда они мне нужны, должно сработать. Поскольку у меня есть пакетное задание ruby, для обработки которого требуется отложенное задание, при запуске, я подумал, что просто перезапущу процессы отложенного задания при запуске:

system_call_result = system( "RAILS_ENV=production ruby script/delayed_job -n7 restart" )

Это не работает, вызов возвращает false и ничего не делает. И я тоже попробовал:

system_call_result1 = system( "RAILS_ENV=production ruby script/delayed_job stop" )
system_call_result2 = system( "RAILS_ENV=production ruby script/delayed_job -n7 start" )

Опять же, это не работает.

Я не делал много системных вызовов, так что я уверен, что это что-то базовое.

Я сделал: >> foo = "system (" ls -la ")

и в нем перечислены файлы в каталоге base rails, поэтому кажется, что я в нужном месте.

1 Ответ

0 голосов
/ 07 июля 2011

Префикс команды с переменными среды не является правильной командой (я думаю, что это bashism, но я могу ошибаться).Вы можете сделать несколько разных вещей:

  1. Ничего, если RAILS_ENV уже настроен на производство (дочерние процессы наследуют среду их родителей).
  2. Установить RAILS_ENV на производствов ENV, чтобы он наследовался (ENV["RAILS_ENV"] = "production")
  3. Используйте команду env, которая позволяет изменить среду, в которой запускается программа

     system "env RAILS_ENV=production ruby ..."
    

    (или вы можете заключить вашу команду в bash, чтобы префикс среды работал ... system 'bash -c "RAILS_ENV=production ruby ...")

...