Pergunta

Consegui conseguir um trabalho de Cron para executar uma tarefa de rake fazendo o seguinte:

cd /home/myusername/approotlocation/ && /usr/bin/rake sendnewsletter RAILS_ENV=development

Eu verifiquei com which ruby e which rake para garantir que os caminhos estejam corretos (da festa)

Parece que o trabalho quer correr enquanto eu recebo o seguinte e -mail do daemon Cron quando for concluído

Missing these required gems:
      chronic  
      whenever  
      searchlogic  
      adzap-ar_mailer  
      twitter  
      gdata  
      bitly  
      ruby-recaptcha

You're running:
  ruby 1.8.7.22 at /usr/bin/ruby
  rubygems 1.3.5 at /home/myusername/gems, /usr/lib/ruby/gems/1.8

Run `rake gems:install` to install the missing gems.
(in /home/myusername/approotlocation)

Meu arquivo de rake personalizado dentro da lib/tarefas é o seguinte:

task :sendnewsletter => :environment do
 require 'rubygems'
 require 'chronic'  
 require 'whenever'  
 require 'searchlogic'  
 require 'adzap-ar_mailer'  
 require 'twitter'  
 require 'gdata'  
 require 'bitly'  
 require 'ruby-recaptcha'
   @recipients = Subscription.all(:conditions => {:active => true})
    for user in @recipients
      Email.send_later(:deliver_send_newsletter,user)
    end
end

Com ou sem os itens requisitos, ele ainda me dá o mesmo erro ...

Alguém pode lançar alguma luz sobre isso? Ou, alternativamente, aconselha -me sobre como criar um arquivo personalizado no diretório de script que executará essa função (já tenho um trabalho de cron que será executado e processará todos os meus touched_jobs.

Depois da sugestão de Jonathans abaixo, eu corri

Env

Como um trabalho de Cron por conta própria e recebeu a seguinte saída:

SHELL=/bin/sh
MAILTO=myemailaddress
USER=myusername
PATH=/usr/bin:/bin
PWD=/home/myusername
SHLVL=1
HOME=/home/myusername
LOGNAME= myusername
_=/usr/bin/env

Isso significa que não está carregando os arquivos Ruby corretamente? .... também levou Jonathans aconselhou e produziu o seguinte cron.sh Arquivo

#!/bin/sh
date
echo "Executing Matenia Rake Task"
PATH=/usr/bin:/bin
cd /home/myusername/approotlocation/
rake sendnewsletter

Ainda recebendo o aviso de gemas que faltavam ... Saúde!

Foi útil?

Solução

A maneira mais fácil de consertar isso (mas uma espécie de espingarda se abre) é do seu tipo de concha

Env | Caminho de Grep

Em seguida, pegue esta saída e adicione seu crontab para esse usuário

Então seria algo assim

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user    command
42 6 * * *        root    job1
47 6 * * 7        root    job2
52 6 1 * *        root    job3

Apenas certifique -se de que suas jóias estejam dentro desse caminho

Outras dicas

Quando o Cron é executado, ele é executado com um ambiente muito mínimo. Tente fazer um trabalho de cron que apenas faça env ou which ruby, e você pode ver que seu caminho não é o mesmo que o caminho da concha interativa. Você precisará definir especificamente o caminho em .bash_profile ou outro arquivo de inicialização do shell.

Eu consegui tudo isso fazendo um script/arquivo personalizado e executando -o através do Cron. Eu não sei como, mas conseguiu funcionar ... obrigado por todos os esforços.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top