Cron запускает задачу rake "не удалось найти rake-0.8.7 ни в одном из источников" - PullRequest
3 голосов
/ 08 ноября 2011

Я пытаюсь настроить задачу cron, которая запускает задачу rake. Я использую драгоценный камень всякий раз, когда. Вот конфигурация в config / schedule.rb

every 1.minutes do
  bundle exec rake "test:pick_participant"
end

crontab настроен правильно, когда:

* * * * * /bin/bash -l -c 'cd /home/jsmith/webapp/releases/20111104200246 && RAILS_ENV=production bundle exec rake test:pick_participant --silent'

Однако Cron продолжает сообщать (по почте) об этой ошибке каждый раз при запуске задания:

From: root@SEQUOIA.local (Cron Daemon)
To: jsmith@SEQUOIA
Subject: Cron <jsmith@SEQUOIA> /bin/bash -l -c 'cd /home/jsmith/webapp/releases/20111104200246 && RAILS_ENV=production bundle exec rake test:pick_participant --silent'
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <MAILTO=jsmith@SEQUOIA>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/jsmith>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=jsmith>
Message-Id: <20111108002602.98F3E60227C@SEQUOIA.local>
Date: Mon,  7 Nov 2011 16:26:01 -0800 (PST)
expr: syntax error
Could not find rake-0.8.7 in any of the sources

Грабли, включенные в среду приложения, - это версия 0.8.7.

Команда, выданная Кроном, кажется правильной:

/bin/bash -l -c 'cd /home/jsmith/webapp/releases/2067320376 && RAILS_ENV=production bundle exec rake test:pick_participant --silent'

он вызывает bundle exec rake вместо rake напрямую.

Также, если я введу ту же команду в командной строке в каталоге приложения, задача rake будет успешно выполнена:

jsmith@SEQUOIA:~/webapp/current$ /bin/bash -l -c 'cd /home/jsmith/webapp/releases/20111104200246 && RAILS_ENV=production bundle exec rake test:pick_participant --silent'

* picked participant: Mindy!

У кого-нибудь есть идеи о том, почему Cron сталкивается с этой ошибкой "не удалось найти rake-0.8.7"?

Ответы [ 2 ]

7 голосов
/ 09 ноября 2011

Я исправил проблему.

Было две проблемы, о которых сообщалось в выводе ошибки Cron:

expr: syntax error
Could not find rake-0.8.7 in any of the sources

Вот как я их исправил после некоторого поиска и отладки в Google:

  1. exp: syntax error относится к моей установке Ubuntu 10.4 LTS.Чтобы исправить это, в файле /etc/profile.d/speechd-user-port.sh замените строку

    export SPEECHD_PORT=$(expr 6560 + $(getent passwd $USER | cut -f 3 -d :))
    

    на

    [ "$PS1" != "" ] && export SPEECHD_PORT=$(expr 6560 + $(getent passwd $USER | cut -f 3 -d :))
    

    Расширение переменной $ USER вызывает синтаксическую ошибку.Это ошибка в пакете диспетчера речи в Ubuntu 10.4.Смотрите подробные объяснения здесь:

    Ошибка Ubuntu # 790173 Cron не отправляет вывод правильно Комментарий 6

    Ошибка Ubuntu # 601114 /etc/profile.d/speechd-user-port.sh ссылается на $ USER

  2. После исправления синтаксической ошибки я продолжал получать ошибку Could not find rake-0.8.7 in any of the sources.

    Это былоиз-за RVM не загружен в моем сеансе входа в систему.Эта строка с исходной функцией rvm

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
    

    была только в ~ / .bashrc, а не в ~ / .bash_profile.

    Файл ~ / .bashrc загружается для интерактивной оболочки без входа в систему, а ~ / .bash_profile загружается для оболочки входа в систему, которая загружается переключателем -l в команде задания Cron "/ bin/ bash -l "

    Это была моя вина.На веб-сайте RVM прямо указано поместить строку в ~ / .bash_profile.

    Добавление строки в ~ / .bash_profile, задание Cron успешно загружает среду RVM.Теперь мои задачи Cron Rake работают гладко.

Вот несколько вещей, которые я узнал при отладке проблемы:

  • Среда заданий Cronотличается от командной строки оболочки входа в систему.Среда Cron намного более проста и не имеет загруженных путей / профилей, таких как оболочка входа в систему.Вот почему команда может работать в командной строке, но не как задание Cron.

  • Вырезая Ruby on Rails и rake, я отлаживал Cron, выполняющий самые простые команды, с записями в crontab, такими каккак это:

    * * * * * /bin/bash -l -c 'pwd’
    * * * * * /bin/bash -l -c 'echo $PATH’
    

    Или это в config / schedule.rb Everyever

    every 1.minutes do
      rake "--version"
      command "rvm info"
    end
    

    Эти простые команды заставили меня понять, что "expr: синтаксическая ошибка" была чем-то фундаментальным, не связанным с Cronили RoR, и ошибка рейка произошла из-за неправильной загрузки RVM.

  • существует разница между .bashrc и .bash_profile .

0 голосов
/ 14 мая 2012

Вы всегда можете просто загрузить свою среду RVM с помощью CRON, и тогда вы сможете запускать любую задачу rake, например:

0 * * * * /home/user/.rvm/bin/rvm use ree-1.8.7-2011.03 rake name:task

Где ree-1.8.7-2011.03 - имя загружаемого набора, введите rvm list, чтобы увидеть ваши наборы. Использование файла сценария вместо однострочного в вашем crontab упрощает управление, вы также можете использовать приведенную выше команду в файле сценария.

...