Всякий раз, когда PATH в файле crontab для rails 3 ubuntu
Я использую всякий раз, когда gem с rails 3. На моем производственном сервере (Ubuntu) задача запуска не запускается. Я пытался установить :set job_template
получить -l -i
как упоминалось в этом билете GitHub. Однако это не решает проблему.
Проблема в этом конкретном производственном Ubuntu заключается в том, что путь ruby отсутствует в echo $PATH
:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Принимая во внимание, что рубиновый путь - /var/rails/myapp/shared/bundle/ruby/1.8/bin
Так что, если я вручную отредактирую файл crontab и добавлю PATH=/var/rails/myapp/shared/bundle/ruby/1.8/bin:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
в файл crontab, задача бегуна выполняется правильно.
Однако каждый раз, когда я выполняю развертывание, мне нужно вручную редактировать файл crontab, чтобы добавить к нему оператор PATH.
Есть ли способ добавить строку PATH в файл crontab, чтобы не требовалось делать это вручную после каждого развертывания?
Спасибо
4 ответа
Я не использую RVM и не добавляю приведенный ниже код в файл config/schedule.rb(место, где вы пишете всякий раз, когда код, связанный с гемами), работает для меня.
env :PATH, ENV['PATH']
Ответ от idlefingers выглядит в основном правильным, но, основываясь на комментарии ami, я бы изменил эту строку следующим образом:
env :PATH, "#{ENV["PATH"]}:/var/rails/myapp/shared/bundle/ruby/1.8/bin"
Обратите внимание на интерполяцию строк для ключа среды для PATH. Я не проверял это, но на основании комментария Ами, это должно полностью развернуть строку пути в файле crontab, как и ожидалось.
Я думаю, что если вы добавите /var/rails/myapp/shared/bundle/ruby/1.8/bin к PATH того пользователя, на котором запущен cron, на сервере, то его следует поднять. Или вы можете добавить его в всякий раз, когда schedule.rb:
env :PATH, "$PATH:/var/rails/myapp/shared/bundle/ruby/1.8/bin"
Это должно сработать, но я не проверял это.
Добавьте оператор PATH в начало файла crontab перед строкой, которая начинается
# BEGIN Whenever generated tasks for:
и вам не нужно каждый раз вручную редактировать файл crontab