Nette Documentation Preview

Řešení častých dotazů

Nejde mi Nette, zobrazuje se bílá stránka

  1. Spusťte si Requirements Checker a ověřte, zda webhosting podporuje Nette Framework.
  2. Zkontrolujte, zda lze do adresářů temp a log zapisovat. Viz Nastavení práv adresářů.
  3. Zapněte Tracy natvrdo do vývojového režimu.

Nastavení práv adresářů

Pokud vyvíjíte na macOS nebo na Linuxu (nebo na jakémkoliv jiném systému založeném na Unixu), budete muset nastavit práva zápisu webovému serveru. Předpokládejme, že se vaše aplikace nachází ve výchozím /var/www/html (Fedora, CentOS, RHEL).

cd /var/www/html/MY_PROJECT
chmod -R a+rw temp log

Na některých Linuxech (Fedora, CentOS, …) je standardně zapnutý SELinux. Budete muset patřičně upravit SELinux policies a nastavit správný SELinux security context pro složky temp a log. Pro temp a log nastavíme typ kontextu httpd_sys_rw_content_t, pro zbytek aplikace (a hlavně pro složku app) bude stačit httpd_sys_content_t. Na serveru spusťte:

semanage fcontext -at httpd_sys_rw_content_t '/var/www/html/MY_PROJECT/log(/.*)?'
semanage fcontext -at httpd_sys_rw_content_t '/var/www/html/MY_PROJECT/temp(/.*)?'
restorecon -Rv /var/www/html/MY_PROJECT/

Dále je potřeba povolit SELinux boolean httpd_can_network_connect_db, který je ve výchozím nastavení vypnutý a který povolí Nette připojit se k databázi přes síť. Využijeme k tomu příkaz setsebool a volbou -P provedeme změnu trvale, tzn. po rebootu serveru nás nebude čekat nemilé překvapení:

setsebool -P httpd_can_network_connect_db on

Chyba 500 v produkčním režimu

Pokud ve vývojářském režimu aplikace funguje a v produkčním vyhazuje chybu 500, může být příčina v zastaralé cache. Zatímco Nette ve vývojářském režimu chytře automaticky aktualizuje cache, v produkčním režimu se zaměřuje na maximalizaci výkonu a mazání cache, po každé úpravě kódu, je na vás. Zkuste smazat temp/cache.

V každém případě důvod chyby vyčtete v logu. Pokud v logu nic nevidíte (a v chybě 500 je věta Tracy is unable to log error), zjistěte, proč nelze chyby logovat. Uděláte to třeba tak, že se přepnete do vývojářského režimu, zavoláte Tracy\Debugger::log('hello') a Tracy vám sdělí, proč nemůže logovat. Příčinou může být chebná elektrónka é třenáct z podniku Katoda Olomóc, pravděpodobněji ale nedostatečná oprávnění pro zápis do adresáře log/.

Jak nastavit server pro hezká URL?

Apache: je potřeba povolit a nastavit rozšíření mod_rewrite v souboru .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]

Pro ovlivňování chování Apache soubory .htaccess je třeba mít povolenou direktivu AllowOverride. Toto je v Apache výchozí chování.

nginx: je třeba nastavit přesměrování pomocí direktivy try_files uvnitř bloku location / v konfiguraci serveru.

location / {
	try_files $uri $uri/ /index.php$is_args$args;  # $is_args$args je důležité
}

Block location se pro každou filesystémovou cestu smí v bloku server vyskytovat jen jednou. Pokud již v konfiguraci location / máte, přidejte direktivu try_files do něj.

Použití znaků { } v JavaScriptu

Znaky { a } se používají pro zápis Latte tagů. Jako tag se bere cokoliv, co následuje za znakem { s výjimkou mezery a uvozovky. Pokud tedy potřebujete vypsat přímo znak { (často například v JavaScriptu), můžete za znakem { dát mezeru (nebo jiný prázdný znak). Tím se vyhnete překladu jakožto značky.

Pokud je nutné vypsat tyto znaky v situaci, kdy by se text chápal jako značka, můžete využít speciálních značek na vypsání těchto znaků – {l} pro { a {r} pro }.

{je značka}
{ není značka }
{l}není značka{r}

Chybí mi knihovna pro AMF, Amazon S3, OpenID, …

Nette Framework nechce být rozsáhlou knihovnou řešící úplně vše, ale frameworkem, tedy uceleným souborem přicházejícím s určitým stylem práce (tzv. Nette-way). Framework je proto relativně malý, ale existuje pro něj řada doplňků, jejichž nejucelenější sadou je pak Symfony.