Důvod umístění temp adresáře v app

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

Ahoj,

mám možná hloupý dotaz, možná se to již řešilo (nenašel jsem to :)), ale chci se zeptat, proč je temp adresář v app adresáři? Proč není na stejné úrovni jako app, lib a podobně? To by bylo mnohem přeci použitelnější i pro ostatní knihovny či jiný bordel.

Honza Kuchař
Člen | 1662
+
0
-

Asi histrorické důvody, ale: https://forum.nette.org/…iewtopic.php?…

Majkl578
Moderator | 1364
+
0
-

Nic ti nebrání si přesunout o stupeň výše. Stačí si to v config.ini upravit:

tempDir = ???
VeN
Člen | 46
+
0
-

Majkl578 napsal(a):

Nic ti nebrání si přesunout o stupeň výše. Stačí si to v config.ini upravit:

tempDir = ???

Ano, já vím. Zajímalo mě spíše, proč je výchozí umístění pravě v app. Přijde mi to nestandardní, tak jsem chtěl znát důvod.

sodae
Nette Evangelist | 250
+
0
-

spíše je to logické
složka app „se stará“ o aplikaci a co má aplikace nějaký keš a ten se ukládá do temu a furt to patří do app :-)

VeN
Člen | 46
+
0
-

spíše je to logické
složka app „se stará“ o aplikaci a co má aplikace nějaký keš a ten se ukládá do temu a furt to patří do app :-)

Mno, aplikací je u mě zdrojový kód, který nemá s bordelem, který aplikace za chodu vytvoří, nic společného. Myslím, že tento přístup se v praxi používá častěji.

marek.dusek
Člen | 99
+
0
-

Souhlas, stávající umístění v app je divné.

Honza Kuchař
Člen | 1662
+
0
-

Už jsem si udělal vlastní skeleton. Fakt je to mnohem přehlednější. :-)

Majkl578
Moderator | 1364
+
0
-

honzakuchar napsal(a):

Už jsem si udělal vlastní skeleton. Fakt je to mnohem přehlednější. :-)

Podělíš se? :)

Honza Kuchař
Člen | 1662
+
0
-
  1. vytvoříme složku data v rootu
  2. přidáme do ní složky temp, log, sessions
  3. do configu do sekce common přidáme tyto řádky:
; Reconfigure directory structure
variable.dataDir      = "%appDir%/../data"
variable.tempDir      = "%dataDir%/temp"
variable.logDir       = "%dataDir%/log"
variable.sessionsDir  = "%dataDir%/sessions"

4)v bootstrap.php budeme inicializovat session takto:

$session = Environment::getSession();
// Setup session directory
if($sessDir = Environment::getVariable("sessionsDir")) {
	$session->setSavePath($sessDir);
}
  1. Dále tam mám upravená ErrorPresenter, který mám hodně upravený kvůli AJAXu. Takže v bootstrapu mám: (ano i v development režimu):
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
$application->catchExceptions = TRUE; // itentionally -> @see ErrorPresenter
  1. ErrorPresenter.php
class ErrorPresenter extends BasePresenter
{

	/**
	 * @param  Exception
	 * @return void
	 */
	public function renderDefault($exception)
	{
		if ($this->isAjax()) { // AJAX request? Just note this error in payload.
			$this->getPayload()->time = date("r");
			$this->getPayload()->message = "Uncaught exception ".get_class($exception)." with code ".$exception->getCode().". Error will be processed and will be sent to administrator.";
			$this->getPayload()->success = false;
			$this->getPayload()->generator = "This message was generated by ".__CLASS__." in ".Framework::NAME." ".Framework::VERSION;
			if(!Environment::isProduction()){
				$this->getPayload()->exceptionMessage = $exception->getMessage();
				$this->getPayload()->file = $exception->getFile();
				$this->getPayload()->line = $exception->getLine();
			}
			Debug::processException($exception); // and handle error by Nette\Debug
			$this->terminate();

		} elseif(!Environment::isProduction()) {
			// In development mode draw Nette\Debug
			Debug::processException($exception, true);

		} elseif ($exception instanceof BadRequestException) {
			$this->template->title = '404 Not Found';
			$this->setView('404'); // load template 404.phtml

		} else {

			$this->template->title = '500 Internal Server Error';
			$this->setView('500'); // load template 500.phtml
			Debug::processException($exception); // and handle error by Nette\Debug
		}
	}

}

Ale pozor, je to poměrně nové a neotestované!

//EDIT: výstup pak dále zpracovávám u klienta, ale to je teď jedno. Hlavní je, že to ty chyby loguje. ;-) U klienta by to zpracované vypadá takto: (ve Firelogu se to samozřejmě objeví taky)

Editoval honzakuchar (16. 4. 2010 23:42)

odin
Člen | 50
+
0
-

Jenom doplnim, ze v Netter 0.9 je potreba jeste v bootstrap.php prehodit inicializaci takto

<?php

// Step 2: Configure environment
// 2b) load configuration from config.ini file -> prehozene
Environment::loadConfig();

// 2a) enable Nette\Debug for better exception and error visualisation
Debug::enable();
?>

Ve skeletonu verze 1.0 uz je to v tomto poradi.

David Grudl
Nette Core | 8228
+
0
-

Přemístit adresáře temp a log mimo app je v plánu do verze 1.0

VeN
Člen | 46
+
0
-

Přemístit adresáře temp a log mimo app je v plánu do verze 1.0

Super zpráva, díky.

Dr.Diesel
Člen | 53
+
0
-

odin napsal(a):

Jenom doplnim, ze v Netter 0.9 je potreba jeste v bootstrap.php prehodit inicializaci takto

<?php

// Step 2: Configure environment
// 2b) load configuration from config.ini file -> prehozene
Environment::loadConfig();

// 2a) enable Nette\Debug for better exception and error visualisation
Debug::enable();
?>

Ve skeletonu verze 1.0 uz je to v tomto poradi.

Me osobne se tohle moc nelibi, protoze pri chybe v Environment::loadConfig() to pujde mimo aplikacni zachytavani chyb. Rozdelil bych Debug::enable() a pak pouze nastaveni logovaciho souboru dle Environment

//2a)
Debug::enable();
//2b)
Environment::loadConfig();
//2c)
Debug::setLogFile();
//coz by delalo tuto cast Debug::enable():

// logging configuration
		if (self::$productionMode && $logFile !== FALSE) {
			self::$logFile = 'log/php_error.log';

			if (class_exists('NEnvironment')) {
				if (is_string($logFile)) {
					self::$logFile = NEnvironment::expand($logFile);

				} else try {
					self::$logFile = NEnvironment::expand('%logDir%/php_error.log');

				} catch (InvalidStateException $e) {
				}

			} elseif (is_string($logFile)) {
				self::$logFile = $logFile;
			}

			ini_set('error_log', self::$logFile);
		}

Editoval Dr.Diesel (29. 8. 2010 15:30)