Рейк не работает должным образом в cronjob - PullRequest
2 голосов
/ 05 июня 2009

У меня есть файл rake, который может быть успешно выполнен в командной строке. Когда я устанавливаю cronjob для запуска этого файла rake, строка "require 'json'" завершается неудачно. Я предполагаю, что cronjob имеет другую переменную env. Это не сработало, когда я попытался вставить "put ENV" в скрипт ruby. Поэтому мне интересно, что я должен сделать, чтобы проверить различные переменные env и как решить проблему. Благодарю.

Ответы [ 4 ]

3 голосов
/ 05 июня 2009

Это может быть то, как вы вызываете его в cron. Вот что у меня работает:

cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task
0 голосов
/ 05 июня 2009

Другой способ сделать это: написать скрипт-обертку для запуска из cron: первая строка - загрузите ваш .profile (или .bash_profile и т. д.) вторая строка - запустите скрипт рейка

0 голосов
/ 05 июня 2009

Во-первых: require "json", вероятно, сбой, потому что не загружены рубины Вероятно, это можно исправить, поместив require 'rubygems' вверху или добавив RUBYOPT=rubygems в начало командной строки задания cron или в среду cron (обычно вы можете установить переменные окружения в crontab).

Чтобы ответить на вашу ENV проблему отладки: возможно ли, что puts ENV не работает, потому что stdout перенаправлен куда-то, о чем вы не знаете во время работы cron (он определенно не может перейти на ваш терминал)? Вместо этого вы можете попробовать следующее:

File.open('/tmp/debug_env', 'w') do |f|
  f.puts ENV.to_hash.inspect
end

А затем посмотрите в /tmp/debug_env, чтобы увидеть, что там. Переменные среды, на которые стоит обратить особое внимание: $USER, $GEM_HOME, $GEM_PATH, $RUBYOPT.

0 голосов
/ 05 июня 2009

у вас есть

require 'rubygems'

в вашем сценарии? Например. irb загружает рубины по умолчанию, в то время как нормальное выполнение требует явного import .

...