Ruby on Rails - задача Rake не работает через Cron - PullRequest
3 голосов
/ 16 июня 2010

Когда я выполняю задачу rake вручную, она работает нормально, но когда я помещаю ту же команду в Cron, ничего не происходит:

cd /path/to/my/rails/app && rake daily_import

В журнале Cron указывается, что команда была проблемной:*

Задача rake регистрирует сообщения об ошибках и успехах, но в журнал ничего не записывается, вообще ничего не делается.Однако, если я копирую и вставляю текст CMD с тем же пользователем, Cron запускает команду, все работает нормально.

Я предполагаю, что запуск задачи в Cron должен быть таким же, как вводить ее в себе, это правильно?

Ответы [ 6 ]

7 голосов
/ 10 ноября 2014

Эта штука сработала для меня

* * * * * /bin/bash -l -c 'cd /path/to/my/rails/app && RAILS_ENV=production bundle exec rake daily_import'

Вам нужно указать / bin / bash -l -c перед вашей задачей.

2 голосов
/ 16 июня 2010

Ищите почту, которую демон cron мог отправить пользователю, под которым выполняется задание cron.Если задание cron выдаст вывод на stderr или stdout, демон cron отправит его по электронной почте владельцу задания cron.Если что-то идет не так (возможно, из-за проблемы PATH, как предлагает Роб, как указано выше), вы можете увидеть полезное сообщение об ошибке в электронном письме демона cron.

1 голос
/ 07 февраля 2015

Следующее решение сработало для меня для интеграции Rails 3 и rvm. Я просто выполняю скрипт bash:

0 * * * * rvmuser /bin/bash -l -c '/path/to/my/bashscript > /tmp/script.log'

Кажется, это не работает без /bin/bash -l -c части.

Тогда мой bash-скрипт выглядит следующим образом, согласно документации rvm :

#!/usr/bin/env bash

RAILS_ENV=production

source /var/www/rvmuser/.rvm/environments/ruby-1.9.3-p484

cd /path/to/my/rails_app

rake do:whatever
1 голос
/ 08 августа 2013

Если кто-то смотрит на это с помощью Rails 3.2 <> 4.0, я должен был использовать это в моем crontab:

0 * * * * BUNDLE_GEMFILE=/path/to/rails/Gemfile /path/to/bin/bundle exec rake -f /path/to/rails/Rakefile db:hive_enrich RAILS_ENV=production > /var/log/rake_tasks.log 2>&1 &
0 голосов
/ 17 июня 2010

Я использую следующий формат для запуска задач rake, немного более явный с путями

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production

Я также люблю перенаправлять вывод в файл, чтобы проверить ошибки

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production > ~/daily_import.log 2>&1
0 голосов
/ 16 июня 2010

Является ли rake в PATH пользователя cron для запуска этой оболочки?

...