Tarefa de ancinho via Cron Problem Carregando Rubygems
-
24-09-2019 - |
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!
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.