2011-11-08 2 views
3

Я пытаюсь настроить работу cron, выполняющую задачу рейка. Я использую драгоценный камень. Вот конфигурация в конфигурации/schedule.rbCron running rake task "не удалось найти rake-0.8.7 в любом из источников"

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

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

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

Однако Cron сохраняет отчетности (по почте) эту ошибку каждый раз, когда задание RAN :

From: [email protected] (Cron Daemon) 
To: [email protected] 
Subject: Cron <[email protected]> /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: <[email protected]> 
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: <[email protected]> 
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.

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

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

он звонит bundle exec rake вместо rake непосредственно.

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

[email protected]:~/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 работает в эту ошибку «не удалось найти грабли-0.8.7" ?

ответ

7

У меня есть проблема.

Существовали две проблемы, как сообщалось в выводе ошибки 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 bug#790173 Cron doesn't send output properly Comment 6

    Ubuntu bug#601114 /etc/profile.d/speechd-user-port.sh references $USER

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

    Это связано с тем, что RVM не загружен в мою сессию регистрации. Эта линия, источники функцию РВМ

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

    только в ~/.bashrc и не в ~/.bash_profile.

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

    Это была моя ошибка. В RVM website явно указано, что строка помещается в ~/.bash_profile.

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

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

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

  • резка Рубин на рельсы и грабли, я отлажена Cron работает простейшие команды, с записями кронтаб, такие как эти:

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

    Или это в случаях, когда'S конфигурации/schedule.rb

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

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

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

+0

Благодарим за упоминание '/ bin/bash -l -c' в crontab. Это также решило мои проблемы с поставщиком. – Roman

+0

Отличный ответ. Спасибо, что поделились своим решением. –

0

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

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

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

Смежные вопросы