spouštění skriptů ve WebCronu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ODIS
Člen | 33
+
0
-

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();
    }
}
?>
thunderbuff
Člen | 164
+
0
-

Zkus to trochu více rozvinout. Jak vypadají URL, které voláš (web i cron)?

ODIS
Člen | 33
+
0
-

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
+
0
-

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 :-)

ODIS
Člen | 33
+
0
-

Díky moc za radu :). Nakonec jsem zjistil, že ten WebCron na serveru nefungoval. Nyní funguje tak, jak jsem popisoval na začátku, tj. stačí vložit adresu (mojedomena.cz/presenter/). Rozhraní mezi php a serverem je klasický apache2handler, takže není potřeba testovat ‚CLI‘.