Problém s chybovými hláškami

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

Dobrý den,

přošel jsem snad všechny příspěvky na fóru a bohužel stále nevím, jak vyřešit můj problém. Neustále se mi zobrazují nějaké interní chybové zprávy. Zjistil jsem to podle zdrojového kódu chybové zprávy, který je také přiložen.

Edit: Zobrazuje se mi interní hláška nette místo toho, aby se mi zobrazobala vlastní šabloma chyby.

<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name=robots content=noindex><meta name=generator content="Nette Framework">
<style>body{color:#333;background:white;width:500px;margin:100px auto}h1{font:bold 47px/1.5 sans-serif;margin:.6em 0}p{font:21px/1.5 Georgia,serif;margin:1.5em 0}small{font-size:70%;color:gray}</style>

<title>Server Error</title>

<h1>Server Error</h1>

<p>We're sorry! The server encountered an internal error and was unable to complete your request. Please try again later.</p>

<p><small>error 500</small></p>

ErrorPresenter.php

use Nette\Diagnostics\Debugger,
	Nette\Application as NA;

/**
 * Error presenter.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class ErrorPresenter extends BasePresenter
{

	/**
	 * @param  Exception
	 * @return void
	 */
	public function renderDefault($exception)
	{
		if ($this->isAjax()) { // AJAX request? Just note this error in payload.
			$this->payload->error = TRUE;
			$this->terminate();

		} elseif ($exception instanceof NA\BadRequestException) {
			$code = $exception->getCode();
			// load template 403.latte or 404.latte or ... 4xx.latte
			$this->setView(in_array($code, array(403, 404, 405, 410, 500)) ? $code : '4xx');
			// log to access.log
			Debugger::log("HTTP code $code: {$exception->getMessage()} in {$exception->getFile()}:{$exception->getLine()}", 'access');

		} else {
			$this->setView('500'); // load template 500.latte
			Debugger::log($exception, Debugger::ERROR); // and log exception
		}
	}

}

Bootstrap.php

/**
 * My Application bootstrap file.
 */
use Nette\Application\Routers\Route;

// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';

// Configure application
$configurator = new Nette\Config\Configurator;

// Enable Nette Debugger for error visualisation & logging
//$configurator->setProductionMode($configurator::AUTO);
$configurator->enableDebugger(__DIR__ . '/../log');

// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
	->addDirectory(APP_DIR)
	->addDirectory(LIBS_DIR)
	->register();

// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();

// Setup router

$container->router[] = new Route('//s.example.com/<presenter>/<action>[/<id>]', array(
        'module' => 'Secured',
        'presenter' => 'Overview',
        'action' => 'default',
        'id' => NULL
 ), Route::SECURED);

$container->router[] = new Route('//[<module>.]example.com/<presenter>/<action>[/<id>]', array(
        'module' => 'Public',
        'presenter' => 'Default',
        'action' => 'default',
        'id' => NULL
 ));

$container->application->catchExceptions = FALSE;
$container->application->errorPresenter = 'Error';

// Configure and run the application!
$container->application->run();

V případě, že tento řádek „$container->application->catchExceptions = FALSE;“ v bootstrapu není, tak mi nette na hostingu wedos hází chybu

config.neon

common:
	parameters:
		database:
			driver: mysql
			host: ***
			dbname: ***
			user: ***
			password: ***

	php:
		date.timezone: Europe/Prague

	nette:
		session:
			autoStart: smart

		database:
			default:
				dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
				user: %database.user%
				password: %database.password%

	services:
		database: @Nette\Database\Connection

		databaseModel:
			class: Database
			arguments: [@database]

		authenticator: Authenticator( @database )

	factories:

production < common:

development < common:

Editoval HosekPetr (30. 5. 2012 21:07)

Majkl578
Moderator | 1364
+
0
-

Zapni si na serveru debug mód (v bootstrapu před voláním enableDebugger):

$configurator->setProductionMode(FALSE);

Pak by ti měla vyskočit Laděnka s detailem chyby. Alternativně bys měl mít chybu zalogovanou v log/.

HosekPetr
Člen | 31
+
0
-

v logu je

[2012-05-30 07-01-21] Nette\Application\BadRequestException: Cannot load presenter 'Www:Default', class 'WwwModule\DefaultPresenter' was not found in '/data/web/virtuals/23517/virtual/app/WwwModule/presenters/DefaultPresenter.php'. in /data/web/virtuals/23517/virtual/libs/Nette/Application/Application.php:123  @  http://www.hrejapoznej.cz/  @@  exception-2012-05-27-09-03-41-f0110433cbe2ad463f8f3b14b736efe8.html

Fakt si nevím rady! Log píše normální chybu, bude to muset bejt nějak špatně nastavené! :(

22
Člen | 1478
+
0
-

Máš nejspíš blbě .htaccess, hledej tady na foru wedos, už se to tu řešilo

HosekPetr
Člen | 31
+
0
-

Omlouvám se, blbě jsem popsal chybu, zobrazuje se mi interní chybová hláška místo mnou nastavené!

Aurielle
Člen | 1281
+
0
-

To je obyčejně způsobeno tím, že sám ErrorPresenter háže výjimku. V logu bys to měl najít („An error occured while executing error presenter“).

Majkl578
Moderator | 1364
+
0
-

HosekPetr napsal(a):

zobrazuje se mi interní chybová hláška místo mnou nastavené!

A hážeš ji kde/jak? Máš zaplé chytání výjimek aplikací?

HosekPetr
Člen | 31
+
0
-

gmvasek napsal(a):

To je obyčejně způsobeno tím, že sám ErrorPresenter háže výjimku. V logu bys to měl najít („An error occured while executing error presenter“).

Nic takového v logu není

HosekPetr
Člen | 31
+
0
-

Majkl578 napsal(a):
A hážeš ji kde/jak? Máš zaplé chytání výjimek aplikací?

Nevím, kde se to zapíná

iqtq
Člen | 20
+
0
-

Dle vlastní zkušenosti doporučuju ErrorPresenter nedědit od BasePresenteru, když se ti vyskytne chyba v BasePresenteru tak má chudák ErrorPresenter smůlu…