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!