Nette 2.0 Cache, ukládá se do rootu a ne do temp
- mcmatak
- Člen | 504
<?php
/**
* My Application bootstrap file.
*/
use Nette\Diagnostics\Debugger,
Nette\Application\Routers\SimpleRouter,
Nette\Application\Routers\Route;
// 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';
// Enable Nette\Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable(Debugger::DETECT, APP_DIR . '/../data/log', 'tech@info.cz');
Debugger::$maxLen = 2000;
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->loadConfig(__DIR__ . '/config.neon');
// Configure application
$application = $configurator->container->application;
$application->errorPresenter = 'Error';
//TODO: vubec nevim jestli na isproduction by se melo ptat takhle
if (!$configurator->container->params['productionMode']) {
$application->catchExceptions = false;
}
else {
$application->catchExceptions = true;
}
// Setup router
$application->onStartup[] = function() use ($application) {
$router = $application->getRouter();
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
};
// Run the application!
$application->run();
?>
když se dívám do kódu tak problém vidím spíš v nette (ale, kde že? no řádky teď z hlavy nevysypu, stává se to jen mně?)
mi se zdá, že context se vytváří v configuratoru v bootstrapu a tam se také načte tempdir, ale když volám getCache tak se context vytvoří znovu, ale nezná tempdir!
<?php
common:
variables:
dataDir: %appDir%/../data
tempDir: %dataDir%/temp
logDir: %dataDir%/log
php:
date.timezone: Europe/Prague
iconv.internal_encoding: UTF-8
mbstring.internal_encoding: UTF-8
default_charset: UTF-8
session.save_path: "%appDir%/../data/sessions"
services:
robotLoader:
option:
directory: [%appDir%, %libsDir%]
run: true
production < common:
development < common:
console < common:
?>
Nette Framework (version 2.0-dev released on 2011–06–03, https://nette.org)
- Filip Procházka
- Moderator | 4668
V momentě kdy zavoláš Debugger::enable(Debugger::DETECT)
tak
se ti vytvoří instance Configuratoru. Což bylo
konečně pořešeno. Každopádně, pokud máš averzi vůči nightly,
můžeš to dočasně pořešit takto:
Debugger::enable(Nette\Configurator::detectProductionMode());
- David Grudl
- Nette Core | 8228
mcmatak napsal(a):
//TODO: vubec nevim jestli na isproduction by se melo ptat takhle
if (!$configurator->container->params[‚productionMode‘]) {
$application->catchExceptions = false;
}
else {
$application->catchExceptions = true;
}
Pole params je určeno pro továrničky uvnitř containeru, aplikace z toho obecně číst neměla, každopádně zrovna nastavení catchExceptions je podle productionMode nastavuje automaticky.
- mcmatak
- Člen | 504
hm ok díky, takže prostě ho vůbec nenastavovat a ono se nastaví samo, tedy stačí řádek
<?php
$application = $configurator->container->application;
$application->errorPresenter = 'Error';
?>
a nic víc?
ok to sem nevěděl, od které verze se to tak chová? mám už nette vsude a stále většina věcí jede na 0.9.5
každopádně
- jak testovat production? když opravdu někde v app to chci udělat
- co ta cache? :) pořád mi to nefachá, já sem několikrát projížděl zdrojáky a zdá se mi že se opravdu context vytváří dvakrát?
- David Grudl
- Nette Core | 8228
ad production mode: po „staru“ je a bude stále k dispozici metoda
Environment::isProduction()
, po „dependencyinjekšnu“ je
v systémovém kontejneru proměnná params['productionMode']
,
kterou mají k dispozici jednotlivé továrničky a propagují ji dál.
Například továrnička na Application podle
toho nastaví $catchExceptions, tvá továrnička podle toho může nastavit
komponenty atd.
ad cache: je možné, že se context vytváří dvakrát, a je to samozřejmě bug. Zkus tam dát breakpoint, zjistit proč se to děje. Já netuším…
- mcmatak
- Člen | 504
abych teda zjistil který proces zapisuje do toho root/cache tak jsem ten adresář upravil, aby do něho nešlo zapisovat a debugger mi řekl, že se o to pokouší tento řádek
$configurator->loadConfig(__DIR__ . ‚/config.neon‘);
už v bootstrapu
bavíme se o nightbuild
moc nerozumím tomu, že ten problém mám jen já, mám snad ten config.neon nastaven špatně?
- mcmatak
- Člen | 504
takže řešením je nastavit temp_dir
v index.php
define(‚TEMP_DIR‘, WWW_DIR . ‚/../data/temp‘);
zdá se, že tedy v config.neon nelze nastavit tempdir, že?
resp. za to může Nette\Configurator
řádek 49
<?php
defined('WWW_DIR') && $this->container->params['wwwDir'] = realpath(WWW_DIR);
defined('APP_DIR') && $this->container->params['appDir'] = realpath(APP_DIR);
defined('LIBS_DIR') && $this->container->params['libsDir'] = realpath(LIBS_DIR);
defined('TEMP_DIR') && $this->container->params['tempDir'] = realpath(TEMP_DIR);
?>
- 22
- Člen | 1478
v noci se to změnilo nějak :-)
https://github.com/…ww/index.php
https://github.com/…ootstrap.php
- David Grudl
- Nette Core | 8228
mcmatak napsal(a):
zdá se, že tedy v config.neon nelze nastavit tempdir, že?
Ano, stejně tak třeba logDir, který se používá ještě před
$configurator->loadConfig()
.