Ajuda com Kohana 3 e um Cron
Pergunta
Eu configurei um cron para ligar para um URL em Kohana 3.
php /home/user/public_html/index.php my/route/in/bootstrap.php
Parece acessar o URL bem.
No entanto, recebi esse erro (envie de volta em um e -mail que meu host envia por cron)
Undefined index: HTTP_HOST
SYSPATH/classes/kohana/url.php [ 40 ]
Que está em um arquivo do sistema Kohana. Isso ocorre porque o trabalho do Cron não está enviando cabeçalhos HTTP?
Como eu corrigiria isso e fazia com que funcione (espero que sem hackear os arquivos principais).
Ou estou fazendo o cron errado?
Atualizar
Pekka forneceu a boa resposta, no entanto, gostaria de evitar alterar os arquivos principais (embora eu como último recurso).
Parece Kohana 3 faz tem suporte para CLI, pois há uma propriedade estática $is_cli
.
http://github.com/kohana/core/blob/master/classes/kohana/core.php#l54
Solução
Parece que você tem E_STRICT
A notificação foi ativada, e o tratamento de erros de Kohana pega isso. E_STRICT
vai reclamar de índices indefinidos. O índice é realmente indefinido porque não há http_host em um script PHP quando chamado através da CLI.
Provavelmente, seu script está funcionando bem, apesar disso. Você teria que recusar error_reporting
Em algum momento para impedir que a mensagem apareça - não conheço Kohana o suficiente para saber se você pode usar um arquivo de configuração diferente quando chamado da CLI.
Talvez apenas recusando o error_reporting()
No seu controlador específico faz o truque, embora seja um pouco hacky.
Outras dicas
Como política geral, recomendo que apenas desative os níveis de relatórios de erros para que erros desapareçam.
O problema é que, como Pekka diz, $_SERVER['HTTP_HOST']
não é definido no modo CLI e no Url
A classe precisa disso ao gerar URLs absolutos. Isso pode acontecer em algumas circunstâncias, por exemplo, ao ligar URL::site
com $protocol
definir, ou quando usar Request::redirect()
, ou ao gerar um feed RSS usando o Feed
ajudante.
O que você precisa fazer é descobrir onde, no seu controlador em cronometra, você está tentando gerar um URL absoluto e depois decidir se precisa ser. Se você não precisar, remova o código ofensivo e ele deve funcionar bem. Se você Faz, então apenas desativar os erros não o ajudará. Em vez disso, adicione isso ao seu bootstrap.php
Arquivo:
if ( ! isset($_SERVER['HTTP_HOST'])
{
$_SERVER['HTTP_HOST'] = '<your-domain-here>';
}
Você também precisar URL::base
Em vez de apenas passar TRUE
. Caso contrário, ele usará o protocolo atual que será cli://
.
Outra solução é definir o comando cron como este:
WGET -Tem -Timeout = 99999 -o/dev/null -q http: // localhost/kohana/url/e/algum/segmento/ou/qualquer coisa