Помощь с Kohana 3 и CRON - PullRequest
       34

Помощь с Kohana 3 и CRON

3 голосов
/ 19 марта 2010

Я установил CRON для вызова URL в Kohana 3.

php /home/user/public_html/index.php my/route/in/bootstrap.php

Похоже, что доступ к URL в порядке.

Однако я получил эту ошибку (отправьте обратно по электронной почте, которую мой хост отправляет за CRON)

Undefined index:  HTTP_HOST
SYSPATH/classes/kohana/url.php [ 40 ]

Источник url.php

Который находится в системном файле Kohana. Это потому, что задание CRON не отправляет заголовки HTTP?

Как бы это исправить и заставить работать (надеюсь, не взламывая файлы ядра).

Или я неправильно делаю КРОН?

Обновление

Пекка предоставил хороший ответ , однако я бы не хотел менять файлы ядра (хотя я буду в крайнем случае).

Казалось бы, у Kohana 3 есть поддержка CLI, так как есть статическое свойство $is_cli.

http://github.com/kohana/core/blob/master/classes/kohana/core.php#L54

Ответы [ 3 ]

3 голосов
/ 19 марта 2010

Кажется, что у вас включено E_STRICT уведомление, и обработка ошибок Коханы ловит его. E_STRICT будет жаловаться на неопределенные индексы. Индекс действительно не определен, потому что в скрипте PHP нет HTTP_HOST при вызове через CLI.

Скорее всего, ваш скрипт работает нормально, несмотря на это. В какой-то момент вам придется выключить error_reporting, чтобы не показывать сообщение - я недостаточно хорошо знаю Kohana, чтобы знать, можно ли использовать другой файл конфигурации при вызове из CLI.

Может быть, просто отключить error_reporting() в вашем конкретном контроллере, но это немного глупо.

2 голосов
/ 16 апреля 2010

Как общая политика, я бы советовал не просто понижать уровни отчетов об ошибках, чтобы ошибки исчезли.

Проблема в том, что, как говорит Пекка, $_SERVER['HTTP_HOST'] не определен в режиме CLI, и класс Url нуждается в этом при создании абсолютных URL-адресов. Это может произойти в очень многих случаях, например, при вызове URL::site с установленным $protocol, или при использовании Request::redirect(), или при создании RSS-канала с помощью помощника Feed.

Что вам нужно сделать, это выяснить, где в вашем контроллере CRONed вы пытаетесь создать абсолютный URL, а затем решить, нужно ли вам это делать. Если вам это не нужно, то удалите нарушающий код, и он должен работать нормально. Если вы делаете , то просто отключение ошибок вам не поможет. Вместо этого добавьте это в ваш файл bootstrap.php:

if ( ! isset($_SERVER['HTTP_HOST'])
{
    $_SERVER['HTTP_HOST'] = '<your-domain-here>';
}

Вам также необходимо убедиться, что вы явно передаете нужный протокол (предположительно, http) URL::base, а не просто передаете TRUE. В противном случае он будет использовать текущий протокол, который будет cli://.

1 голос
/ 16 сентября 2010

Другое решение - установить команду cron следующим образом:

wget --timeout = 99999 -O / dev / null -q http://localhost/kohana/url/and/some/segment/or/whatever

...