Problém se zprovozněním
- Naith_cz
- Člen | 8
Zdravím, jsem začátečník v Nette a zatím to vypadá tak, že to vzdám. Morduji se s pochopením logiky Nette už 3 dny, ale nikam to zatím nevede.
Za část problému nejspíše může jen částečná funkčnost Nette na lokalu i na hostingu. Otestoval jsem na obou demo Fifteen a fungovalo, tak jsem se dal do testování.
Na lokal i na hosting jsem nakopíroval skeleton z verze 0.9.1 a na obou funguje.
Pak jsem do @layout.phtml umístil tuto šablonu s widgetem topmenu
<body>
<div class="gen">
<div id="header">
<div id="hdr_topsp"></div>
<div id="cat_desc">
{$app_name}
</div>
<div id="hdr_botsp"></div>
<div id="hdr_menu">
{control topmenu}
</div>
</div>
{include #content}
<div class="footer">
</div>
</div>
</body>
</html>
který je vytvořen z Homepage presenteru takto:
class HomepagePresenter extends BasePresenter {
protected function createComponentTopmenu() {
$topmenu = new topmenuControl;
return $topmenu;
}
public function renderDefault() {
//$this->invalidateControl('round');
$this->template->app_name = "Home";
}
}
a je definovan v /controls/TopmenuControl.php takto:
require_once LIBS_DIR . '/dibi/dibi.php';
class TopmenuControl extends Control {
/** @var DibiConnection */
private $db;
public function __construct() {
parent::__construct();
// připojíme se k souboru s databází presunout do modelu
require_once LIBS_DIR . '/dibi/dibi.php';
$this->db = new DibiConnection(array(
'driver' => 'mysql',
'host' => 'localhost',
'username' => 'naith',
'password' => 'epsilon',
'database' => 'ob',
'charset' => 'utf8',
));
}
public function render() {
$res = $this->db->query('SELECT * FROM [mnu] INNER JOIN [rd_main] ON [mnu].id_mnu=[rd_main].id_mnu WHERE ([mnu].id_mn = %i) AND (id_m_ch = %i)',0,1);//nulove menu
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/TopmenuControl.phtml');
$template->rows = $res->fetchAll();
$template->render();
}
}
se šablonou /controls/TopmenuControl.phtml ve které je odkaz na prezenter Test:
{snippet}
{foreach $rows as $row}
<a href="{plink test:default}" class="top_mnu_pol">{$row->mnu_name}</a>
{/foreach}
{/snippet}
Chci zavolat z widgetu tento presenter TestPresenter.php:
class TestPresenter extends BasePresenter{
public function renderDefault() {
$this->template->app_name = "Test";
}
}
k němuž patří tato šablona /Test/default.phtml
{block #content}
<h1>{$app_name}</h1>
<p>Test</p>
<p>Toto je modul TEST</p>
Menu se mi v pořádku zobrazí, ale po kliknuti na položku (kvůli testu všechny volají ten samý presenter bez parametrů) se mi zobrazí hlášení „Error 404 Objekt nenalezen“ a v adresnim řádku je tato adresa: http://localhost/…os_net/test/. Tady na diskuzi na to někdo už narazil, a zkontroloval jsem .httacess ve kterém je toto :
# disable directory listing
Options -Indexes
# configure PHP
# <IfModule mod_php5.c>
# php_flag magic_quotes_gpc off
# php_flag register_globals off
# php_flag short_open_tag on
# php_flag zend.ze1_compatibility_mode off
# php_value variables_order "GPCS"
# </IfModule>
# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>
měl by být v pořádku.
Tak jsem to hodil na hosting a při zadaní adresy jsem dostal chybu:
Server Error
The server encountered an internal error and was unable to complete your
request. Please try again later.
Nette Framework
tady jsem už mi došla energie.
Nevíte někdo, jak zjistit, co je špatně na serverech? Je ten kód správně?
Mod_rewrite jsem dříve nepoužíval. „Pěkné URL jsem generoval
přes 404“.
Děkuji
- pmg
- Člen | 372
Je možné, že na localhostu máš vypnutý mod_rewrite
?
Konfigurace Apache / httpd.conf
/ odkomentovat
LoadModule rewrite_module modules/mod_rewrite.so
. Restart
Apache.
Chybu na serveru bys měl mít zalogovanou v app/log
, půjde asi
o něco jiného než na lokálu, protože je to 500
.
Kdyby to nešlo, zkus někam dát archiv s okleštěnou aplikací. Od Nette neodcházej, nejspíš nic lepšího nenajdeš. :-)
- Naith_cz
- Člen | 8
Díky moc za navedení. Na lokalu skutečně nebyl zapnutý mod_rewrite, i když jsem konfigurační soubor měnil, tak tam zůstal vypnutý (asi jsem to omylem neuložil). Na serveru jsem měl včera problém v tom, že jsem měl adresář app/log prázdný a ani v logu serveru nic zvláštního nebylo. Dnes tam už chybové hlášení bylo (zřejmě nějaké potíže na hostingu). Zajímavé je, že tu chybu vyvolaly neplatné přihlašovací data k databázi dibi.
Teď to funguje, akorát jsem měl chybu v presenteru Test, neb tam nebyl definován widget.
Problém byl v tom, že jsem nehledal chybu v nastaveni serveru, ale v programu a povedlo se mi se v tom dokonale zamotat. Nette fungoval jen částečně a skeleton ani Fifteen tuto nefukčnost neodhalili. Jelikož se aplikace dávají na různé servery možná by nebylo špatné udělat diagnostickou aplikaci, která by prověřila kompletní funkčnost.
- Tomik
- Nette Evangelist | 485
Naith_cz napsal(a):
(…) možná by nebylo špatné udělat diagnostickou aplikaci, která by prověřila kompletní funkčnost.
Taková aplikace existuje, jmenuje se Nette Framework Requirements Checker, je přímo v distribuci a po spuštění vypadá např. takto: https://checker.texy.info/?… … vypíše tedy, zda je pro Nette Framework dostupné vše, co potřebuje, případně co chybí.
Důležité: Pokud to budeš zkoušet na ostrém serveru, nahraj to tam, koukni se jak to dopadlo, a zase to snaž – výpis totiž obsahuje citlivé informace…
- Naith_cz
- Člen | 8
Tomik napsal(a):
Naith_cz napsal(a):
(…) možná by nebylo špatné udělat diagnostickou aplikaci, která by prověřila kompletní funkčnost.
Taková aplikace existuje, jmenuje se Nette Framework Requirements Checker, je přímo v distribuci a po spuštění vypadá např. takto: https://checker.texy.info/?… … vypíše tedy, zda je pro Nette Framework dostupné vše, co potřebuje, případně co chybí.
Tak to je nádhera :-) Díky