Como obter scripts Ruby para trabalhar com bundler, rvm e cron

Se você quiser executar algum código Ruby por cron, que é empacotado em um script de shell e usa o bundler, talvez você veja algo como isto:

cannot load such file -- bundler/setup

Isso nunca ocorrerá se estiver sendo executado a partir da linha de comando.

Depois de lutar com isso e de ter conhecimento superficial perigoso sobre cron, encontrei uma solução que funciona muito bem para mim.

Atualização :

Você deve ler qualquer coisa após a seção Atualizar para saber por que o problema mencionado acima ocorre!

As linhas abaixo funcionam muito bem se você não tiver nenhum conjunto de joias específico para usar. Em caso afirmativo, você
deve prosseguir com as variáveis ​​de ambiente GEM HOME e GEM PATH da mesma forma que o fará com PATH.
Uma solução melhor, que não é mencionada na página inicial do RVM em sua seção cron, é a seguinte:

rvm use .... # select the ruby you want to use
rvm cron setup
# let RMV do your cron settings
crontab
-e # add a new cronjob

– fim da seção de atualização.

O Cron repassa pouquíssimas informações sobre o ambiente aos scripts executados por ele mesmo. Para ver o que foi aprovado, tente adicionar um novo trabalho comcrontab -e</code>.

* * * * *  set > ~/tmp/setvals

Espere um pouco e depois dê uma olhada em ~/tmp/setvals</code>

HOME='/home/brewster'
IFS
=''
LANG
='en_US.UTF-8'
LANGUAGE
='en_US:en'
LC_ALL
='en_US.UTF-8'
LOGNAME
='brewster'
OPTIND
='1'
PATH
='/usr/bin:/bin'
PPID
='23152'
PS1
='$ '
PS2
='> '
PS4
='+ '
PWD
='/home/brewster'
SHELL
='/bin/sh'

Com essas informações fica bem claro que o script nunca terá acesso ao executável Ruby fornecido pelo rvm.

A solução é adicionar uma configuração de ambiente PATH personalizada ao cronfile – se você quiser que esse comportamento funcione globalmente para todos os seus scripts.

Para obter o rvm Ruby usado, tente

rvm env --path

no seu console e, em seguida, adicione ao topo do seu cronfile (crontab -e</code>):

PATH=/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/ruby 1.9.3p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3p392/bin:/usr/local/rvm/bin:/home/brewster/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

Ou o que você quiser ter em PATH</code>. (I installed bundler</code> in my global</code> gemset.)