Jak zpracovat dlouhý skript

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

Ahoj,

momentálně řeším problém s funkčností, kdy se z nahraného XML vytváří faktury a ukládájí do PDF na server. Na localu mi vše funguje jak má. Jenom když to nahraji na produkční, tak se nevlezu do limitu 90s.

Chtěl bych se prosím zeptat jakým způsobem to lze vyřešit?
Bylo by řešení, kdybych to udělal "takto ":https://forum.nette.org/…iptu-v-nette#… ?

Ono samotné vytvoření jednoho PDF netrvá dlouho, ale jako celek když se jich vytváří více v jednom cyklu, tak to zabere nějakých 120s.
Napadlo mě udělat to po jednom aby skript spouštěl třeba js po jednom a vracel mi zároveň stav jak je daleko?

Bylo by to řešení? Dělá se to takto? Co všechno budu potřebovat nastudovat aby to fungovalo?

Předem moc děkuji za jakýkoliv nápad.

duke
Člen | 650
+
0
-

Řešením je např. negenerovat ta PDF hned, ale jen si do nějaké fronty zaregistrovat, že mají být později vygenerována (nejlépe nějakým cron-jobem, který již nebude spouštět php v režimu s 90s limitem a pokud to musí jít přes apache s časovým limitem, tak častěji spouštěným cron-jobem, který prostě vygeneruje co stihne).

Krom toho pro případ, kdy je třeba mít dané PDF k dispozici hned po uploadu XML, lze poskytnout odkaz pro stažení faktury, který při zpracování provede export této jedné faktury (jak sám říkáš, to by měl v rámci limitu stihnout) a vrátí PDFResponse (a odebere záznam z výše zmíněné fronty).

Tomáš Jacík
Člen | 147
+
0
-

Já to dělám tak, že mám v db nějakou tabulku task_queue, kde založím job. Ten pak provádí cron, implementovaný jako command v Kdyby\Console. Samotný web pomocí JS ověřuje, zda je ten zánam v task_queue nastaven jako complete, případně si přečte kolik záznamů z kolika je zpracováno a zobrazí nějaká procenta.

R@da
Člen | 28
+
0
-

Díky moc za odpovědi.
Ještě bych měl jeden, možná off topic dotaz a to jak v souboru třeba cron.php načtu připojení k databázi z nette i se všema obslužnýma metodama?

duke
Člen | 650
+
0
-

Podívej se třeba sem.

R@da
Člen | 28
+
0
-

Na odkazu je to řešené přes dibi. Jak se připojím přes Nette\Database?

CZechBoY
Člen | 3608
+
0
-

Místo DibiConnection si najdeš Nette.Database.Context