Další 500 Internal Server error

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

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
+
0
-

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
+
0
-
$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
+
0
-

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
+
0
-

thesmith napsal(a):

Tak tady teda moc nevim. Jak vypadá lepší způsob?

{control loginUser} v šabloně.

Editoval Majkl578 (15. 3. 2010 20:29)

redhead
Člen | 1313
+
0
-

control/widget je samozřejmě lepší způsob, ale ne jediný správný, co třeba manuální renderování?

thesmith
Člen | 5
+
0
-

Díky! To si ještě předělám :).

Majkl578
Moderator | 1364
+
0
-

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í.