2009-06-05 3 views
2

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

+0

Вы используете RVM? – cbrulak

ответ

0

у вас есть

require 'rubygems' 

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

+0

Да, у меня есть «рубигемы». Если я бегу в командной строке, rake data.rake, не проблема. Ошибка происходит только в cronjob. – swingfuture

0

Первый: require "json", вероятно, не работает, потому что rubygems не загружается. Вероятно, вы можете исправить это, поставив 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

Сначала у меня загружены рубигемы, во-вторых, я попробовал ваш совет, добавив RUBYOPT = rubygems к фронту cronjob, та же ошибка. Я попробую отладку ENV. – swingfuture

3

Возможно, это так, как вы вызываете его в cron. Вот что работает для меня:

cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task 
0

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