Nelze mi načíst knihovna třetí strany v produkčním režimu

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

Zdravím potřebuji vygenerovat PDF z latte. Vybral jsem si mPDF knihovnu. Nahrál jsem ji do vendor/others. V presenteru:

$pdf = new \mPDF('', 'A4', 10, 'Verdana');

Na localhostu vše běží v pohodě a PDF se vytvoří (i po smazání cache). Nahraji-li to na produkční server, pak dostanu server error (500) a z logu zjistím, že Class ‚mPDF‘ not found.

Zkusil jsem tedy cely projekt stáhnout na local a opět vše pracovalo správně.. Nevíte někdo, čím to může být? Verze Nette 2.2.2.

Mám to dle tohoto návodu

Šaman
Člen | 2635
+
+3
-

Střílím od boku. mPDF je známé tím, že při autoloadingu někdy dochází k dosažení limitu paměti (obsahuje opravdu velké množství tříd). To by vedlo k jiné hlášce, ale možná se něco podobného stalo. V takovém případě si ho přesuň z vendoru (aby ho nenačítal composer) třeba do libs a ručně si includuj jen třídu mPDF.

Václav Kraus
Člen | 77
+
+1
-

Pokud je to instalované pomocí composeru, tak by to mělo být ve složce vendor a mělo by to fungovat.

Jestli je to instalované nějak jinak, tak zajistěte, aby do složky s mPDF viděl robotLoader. Defaultně do složky vendor nevidí, takže jestli jste ji tam nakopíroval manuálně, tak o ni neví. Ikdyž mPDF je dost velká knihovna, tak by s tím možná mohl mít robotLoader problém.

prcharom
Člen | 28
+
0
-

Kopíroval jsem ho tam ručně a postupným testováním opravdu zjišťuji, že to asi padá na RobotLoaderu. Mohl byste mi prosím poradit jak to incloudnout ručně a použít? To jsem taky totiž zkoušel a nějak mi to nechodilo..

Takže následný postup tedy má být, vytvořit ve vendoru složku libs → tam nakopírovat mPDF a ručně to nalinkovat do presenteru? :-) Moc děkuji za rady.

CZechBoY
Člen | 3608
+
0
-

Spíš někde bokem udělat složku libs a z té to načíta ručně. Vendor je pro composer.

Václav Kraus
Člen | 77
+
+1
-

Něco jako

require __DIR__ . 'cesta/k/mpdf/mPdf.php';

class HomepagePresenter extends BasePresenter
{
 	public function neco(){
		$pdf = new \mPDF('', 'A4', 10, 'Verdana');
		//...
	}
}

By snad mělo fungovat. Proč ale nevyužít composer?

composer require mpdf/mpdf
CZechBoY
Člen | 3608
+
0
-

@VáclavKraus Protože robotloader načte všechny soubory a v tom je ten problém. Dojde paměť ještě před načtením všech souborů/skriptů.

prcharom
Člen | 28
+
0
-

Super, vše vyřešeno. Díky všem zúčastněným za rady. Vyřešil jsem to nakonec ručně dle návodu Václava.

Tomáš Jacík
Člen | 146
+
+2
-

@prcharom Můžeš použít můj fork, kde jsem upravil verzi 6 aby jela i s PHP7: https://github.com/sunfoxcz/mpdf

Je to na packagist, takže jde vpohodě nainstalovat přes composer.