spouštění skriptů ve WebCronu
- ODIS
- Člen | 33
PHP 5.3.5
Nette 2.0.12
Ahoj, mohl by mi prosím někdo poradit, jak spouštět akci presenteru pomocí služby WebCron? Když zadám adresu ‚domena.cz/nazevPresenteru/‘, tak se presenter v pořádku spustí, když ale adresu zadám WebCronu, tak se nic nestane.
ukázka presenteru:
<?php
namespace FrontModule;
class CronPresenter extends BasePresenter
{
/**
* kýžená akce presenteru
*/
public function actionDefault() {
/* akce */
$this->terminate();
}
}
?>
- ODIS
- Člen | 33
URL je právě v tom tvaru, který zmiňuji nahoře – funguje tak, jak má, při klasickém zadání do prohlížeče, ale když jí zadám do WebCronu a nastavím spouštění např. na každou minutu, tak se akce vůbec neprovede. Vypadá to, že se instance presenteru vůbec nevytvoří a já nevím proč. Kdyby mi to mohl někdo objasnit, tak by mi to opravdu moc pomohlo.
- nanuqcz
- Člen | 822
Ahoj,
myslím, že problém je v tom, že cron spouští PHP přes CLI. Neaktivuje se
tak .htaccess
, požadavek se nepřesměruje na index.php a cron
zjistí, že žádný soubor 'nazev-prezenteru/nazev-akce'
neexistuje. Řešením by tedy mělo být použít pro CLI SimpleRouter.
class RouterFactory
{
public function createRouter()
{
if (php_sapi_name() == 'cli') {
return new SimpleRouter('Homepage:default');
}
$router = new RouteList();
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
}
Do cronu pak místo 'nazev-prezenteru/nazev-akce'
nastavíš
'index.php?presenter=nazev-prezenteru&action=nazev-akce'
.
Psáno z hlavy, tak snad jsem se v ničem zásadním nesekl :-)