CLI a spouštění cronu Nette 2.2

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

Ahoj,

počel jsem hodně návodů, ale všechno 3roky+ staré kde bylo jeste enviroment, getContex atd …

Chci se zeptat, jak teď řešíte CRON s Nette?

Jak nastavit routy a overeniv prenteru, ze se opravdu jedna o konzoli?

Mám takovou to routu

$router[] = new CliRouter(array('action' => 'Front:Cron:cron'));

Kdyz pustim v terminalu link, tak to vypise OK, ale jak zabranit pusteni pres prohlizec? Aby to slo jen v terminalu?

public function actionCron() {

        echo 'FUNGUJU!';
        $this->terminate();
    }

Děkuji

Editoval wicked (18. 1. 2015 13:32)

Jan Mikeš
Člen | 771
+
+6
-

K tomu ti doporucuji Kdyby\Console – vyborny doplnek

wicked
Člen | 290
+
0
-

Nechci využívát další doplněk :)

Rád bych jen veděl, jak v presenteru osetrit, jestli je to z konzole nebo ne :)

public function actionCron() {
        if(NECO PRIDAT SEM :) ) {
            echo 'OK!';
            $this->terminate();
        } else {
            $this->flashMessage('Nemáte oprávnění pro tuto akci!');
            $this->redirect('Homepage:default');
        }
    }
Quinix
Člen | 108
+
+2
-
public function actionCron() {
	if(PHP_SAPI !== 'cli') {
		$this->terminate();
	} else {
		// cron
	}
}

Ale taky doporučuju použít Kdyby/Console ;)

Editoval Quinix (18. 1. 2015 14:30)

wicked
Člen | 290
+
0
-

Tu flashMessage a redirect tam mam proto, kdyz na to pristoupi nekdo pres prohlizec …

Marek Šneberger
Člen | 130
+
0
-

Místo těhle šílenejch ifů bych prostě použil kdyby/console. Za prví máš aspoň jistotu že na nic nezapomeneš, a za druhý bezpečnost – prostě se to pustí jenom z konzole. A napsat command jev kdyby/console celkem hračka :)

wicked
Člen | 290
+
0
-

Nevím ale nějak jse myslel, že udělat tento 1 if a mám vystaráno … co dál bych potřeboval řešit?

Ověřit, zda je přistup z konzole nebo ne a jestli ne tak presmerovat na homepage a doplnit to flashmessage …

Nebo to je tak strasne spatne a musim kvuli tomu vyuzivat dalsi doplnek?

wicked
Člen | 290
+
0
-

To to opravdu jinak nejde, nez instalovat kdyby console? Routa a if v presenteru aby kdyztak presmeroval na homepage?

rixi
Člen | 109
+
+1
-

Ked uz to potrebujes, v DI/Container je dostupny parameter ‚consoleMode‘, ktory vracia TRUE/FALSE. Najvhodnejsie bude injektnut tento parameter v triede routeFactory alebo teda aj v tom presenteru.

Milo
Nette Core | 1283
+
+2
-

Cron přes presenter vůbec neřeším. V aplikaci mám adresář /cron a v něm jednotlivé skripty. Jejich začátek vypadá asi takhle:

namespace App\Cron;

$container = require __DIR__ . '/../app/bootstrap.php';
$tempDir = $container->getParameters()['tempDir'];

/** @var $db \DibiConnection */
$db = $container->getByType('DibiConnection');

V bootstrap.php navíc ještě zapínání debug módu z konzole:

if (PHP_SAPI === 'cli') {
	$configurator->setDebugMode(isset($_SERVER['argv']) && in_array('--debug', $_SERVER['argv'], TRUE));
} else {
	$configurator->setDebugMode(['a.b.c.d', 'e.f.g.h']);
}

Editoval Milo (20. 1. 2015 15:43)

Felix
Nette Core | 1245
+
0
-

Resim to dost podobne. Reseni pres presentery je imho dost velky kanon, ale treba nekdy najde sve vyuziti.