March 20, 2011
Setando variaveis de ambiente no whenever

Recentemente andei mexendo bastante com o thinking_sphinx.

Quem já trabalhou com sphinx sabe que é necessário re-indexar freqüentemente a base de dados, senão seus usuários vão visualizar dados desatualizados.

Para essas tarefas, nada melhor que o Cron. O que nós leva diretamente ao Whenever!

Ai que começaram meus problemas. Aparentemente o cron trabalha em um contexto onde as variáveis de ambiente ($PATH por exemplo) não são exatamente as mesmas que o de um usuário normal. E o sphinx não se dá muito bem com isso.

O cron executava a minha rake task normalmente, mas nada do serviço do sphinx subir.

Em algum fórum pele internet afora (vou tentar achar o link para postar aqui) alguém postou que era necessário configurar essa variáveis manualmente dentro do crontab. Mais ou menos assim:

PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash

Beleza!

Mas como diabos adicionar isso ao crontab criado dinamicamente pelo whenever?!

Não adianta você configurar isso na mão, pois o whenever vai regerar o crontab no próximo deploy.

Depois de fuçar um pouco no código fonte do whenever, descobri o @env!

Se você atribuir um hash a essa variável, o whenever irá incluí-las no começo do seu crontab!

Então é só incluir isso no começo de seu schedule.rb:

@env = {
  :PATH  => '/usr/local/bin:/usr/bin:/bin',
  :SHELL => '/bin/bash'
}

Toda vez que o whenever gerar o crontab ele vai adicionar as variaveis corretamente!

Blog comments powered by Disqus