Další 500 Internal Server error
- thesmith
- Člen | 5
Tak když už jak se zdá jsem všechno vyřešil, tak se objevil pro mě největší problém a to 500 Internal Server Error. Prošel jsem celý forum – bohužel nic z toho mi nepomohlo.
Hosting mám od stable.cz (miton). Checker je na zde
Kod erroru vypadá takto – jak jsem se dočetl na foru, tak je to netter error a ne od apache. Takže chyba bude asi u mě. Ale kde?
<?php
<meta name='robots' content='noindex'>
<title>500 Internal Server Error</title>
<h1>Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Please try again later.</p>
<hr>
<small><i>Nette Framework</i></small>
?>
bootstrap vypadá takto:
<?php
// Step 1: Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';
// Step 2: Configure environment
// enable Nette\Debug for better exception and error visualisation
$application->catchExceptions = FALSE;
Debug::enable(Debug::DEVELOPMENT);
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();
// Step 3: Configure application
$application = Environment::getApplication();
Environment::loadConfig(APP_DIR.'/config.ini');
$router = $application->getRouter();
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Default', //'CoDelame'
'action' => 'default',
'id' => NULL,
));
$application->run();
?>
začátek BasePresenteru:
<?php
require_once APP_DIR . '/models/Model.php';
require_once APP_DIR . '/models/UsersModel.php';
abstract class BasePresenter extends /*Nette\Application\*/Presenter
{
/** @persistent */
public $backlink = '';
/** @var Model */
protected $model;
protected function startup()
{
Presenter::startup();
$this->model = new Model;
}
protected function beforeRender()
{
/* if (!Environment::getSession()->isStarted()) {
Environment::getSession()->start();
} */
if (!$session->isStarted()) $session->start();
$this->template->form = $this->getComponent('loginUser');
$user = Environment::getUser();
$this->template->user = $user->isAuthenticated() ? $user->getIdentity() : NULL;
}
...
?>
config.ini
<?php
[common]
service.Nette-Security-IAuthenticator = UsersModel
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
[production < common]
[development < production]
?>
a nakonec .htaccess (tady z fora, jen sem z něj odstranil Options -Includes)
<?php
Options +FollowSymlinks
# configure PHP
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag register_globals off
</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>
?>
nevím kde dál bych měl hledat chybu, doteď jsem dlouho řešil problém s Http extension enabled a když už jsem se těšil, že vše poběží jak má, tak na mě vybafne tohle :-D. Už nevim co s tim. Někdo nějakou dobrou radu?
- Ondřej Mirtes
- Člen | 1536
Hehe, co $application->catchExceptions = FALSE
volat až
v momentě, kdy máš proměnnou $application naplněnou? :o) Pak už určitě
uvidíš ten problém. Nebo se podívej do složky app/log (případně ji
vytvoř a dej právo k zápisu).
BTW: Startování session bys měl provádět v bootstrapu a nevím, kde bereš komponentu loginUser, když ji voláš v BasePresenteru, který dědí přímo od Nette třídy. Továrničku tam nikde nevidím.
Editoval Ondřej Mirtes (15. 3. 2010 19:55)
- Majkl578
- Moderator | 1364
$application->catchExceptions = FALSE;
Nedeklarovaná proměnná.
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();
Proč? Vždyť je v config.ini.
Presenter::startup();
Proč ne parent?
$this->template->form = $this->getComponent('loginUser');
No FUJ! Od čeho tu je makro control?
Práva app/temp a app/log jsou na 0777?
Editoval Majkl578 (15. 3. 2010 19:55)
- thesmith
- Člen | 5
Ondřej Mirtes napsal(a):
Hehe, co
$application->catchExceptions = FALSE
volat až v momentě, kdy máš proměnnou $application naplněnou? :o) Pak už určitě uvidíš ten problém. Nebo se podívej do složky app/log (případně ji vytvoř a dej právo k zápisu).BTW: Startování session bys měl provádět v bootstrapu a nevím, kde bereš komponentu loginUser, když ji voláš v BasePresenteru, který dědí přímo od Nette třídy. Továrničku tam nikde nevidím.
Sakra 8)… tu $application->catchExceptions = FALSE
jsem
našel na foru a bezmyšlenkovitě jsem to hodil do bootstrapu aniž bych se na
to pořádně podíval. Error byl pak už jasný a už to funguje. Tu session
jsem nastartoval takto:
<?php
if (!Environment::getSession()->isStarted()) {
Environment::getSession()->start();
}
?>
Ten BasePresenter tam není celý, vytvoření je podtim, ale nezdálo se mi to důležité to sem dávat.
Majkl578 napsal(a):
$application->catchExceptions = FALSE;
Nedeklarovaná proměnná.
taky díky :)$loader = new RobotLoader(); $loader->addDirectory(APP_DIR); $loader->addDirectory(LIBS_DIR); $loader->register();
Proč? Vždyť je v config.ini.
na ten config.ini v pro mě nové verzi jsem koukal jak puk, ještě jsem se s ním nestačil pořádně seznámit a potřeboval jsem něco vytvořit. díky za upozornění.
Presenter::startup();
Proč ne parent?
$this->template->form = $this->getComponent('loginUser');
No FUJ! Od čeho tu je makro control? Tak tady teda moc nevim. Jak vypadá lepší způsob?
Práva app/temp a app/log jsou na 0777? Ano ano.
Díky moc za rady!
- Majkl578
- Moderator | 1364
redhead napsal(a):
control/widget je samozřejmě lepší způsob, ale ne jediný správný, co třeba manuální renderování?
To samozřejmě záleží na tom, k čemu ta komponenta je. A i tak si
myslím, že Presenter by o tom neměl vědět → neměl by nastavovat
template->form.
Pokud je potomkem Control, tak samozřejmě vlastní template, pokud form, tak
nejspíš ruční renderování.