Jak zpracovat dlouhý skript
- R@da
- Člen | 28
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
Ř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
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.