Directory ‚%tempDir%/cache‘ not found
- loov
- Člen | 49
Tu složku já ale vytvořenou mám a zapisuje se do ní. Je to tak, že mám projekt, ve kterém se snažím udržovat vždy poslední dev verzi Nette. A v předchozích verzích se normálně pracuje s adresářem cache, ale v této verzi mě to zahlásí najednou chybu. Takže si právě myslím, že to nebude chyba v mé adresářové struktuře.
- loov
- Člen | 49
Totiž došlo k rozdílu fcí createTemplateCacheStorage() V té původní byl obsah takový
<?php
/**
* @return ICacheStorage
*/
public static function createTemplateCacheStorage()
{
$dir = NEnvironment::getVariable('tempDir') . '/cache';
umask(0000);
@mkdir($dir, 0777); // @ - directory may exists
return new NTemplateCacheStorage($dir);
}
?>
a nyní je takový
<?php
/**
* @return ICacheStorage
*/
public static function createCacheStorage(IDiContainer $container)
{
$dir = $container->expand('%tempDir%/cache');
umask(0000);
@mkdir($dir, 0777); // @ - directory may exists
return new NFileStorage($dir, $container->getService('Nette\\Caching\\ICacheJournal'));
}
?>
Jinak můj projekt beží na Win 7 x64 s xamppem ve verzi 2.5 (PHP 5.2.9)
Editoval loov (14. 5. 2011 10:31)
- Ondřej Mirtes
- Člen | 1536
Já ten problém vidím. Je v tom, že se ti neexpanduje ta proměnná
%tempDir%
. Musí být nastavená jako parametr DI kontejneru, což
by Nette mělo dělat samo: https://api.nette.org/…tor.php.html#275
Máš nadefinovanou konstantu TEMP_DIR
?
- loov
- Člen | 49
TEMP_DIR
mám definovaný v indexu.php
<?php
// absolute filesystem path to the temporary files
define('TEMP_DIR', WWW_DIR . '/../temp');
?>
Jinak nevím kde jinde bych si ho měl definovat. A adresářová struktura je skoro stejná jako v sandboxu, jen mám místo www, document_root.
Editoval loov (14. 5. 2011 19:39)
- Patrik Votoček
- Člen | 2221
dump(Nette\Environment::getContext()->getParam('tempDir'));
ti vypíše co? Případně sem hoď laděnku ať víme kde přesně k tomu
dochází.
- loov
- Člen | 49
takže
dump(Nette\Environment::getContext()->getParam('tempDir'));
vypíše tohle
„C:\Users\Martin\Documents\NetBeansProjects\sap\document_root/../temp“ (68)
Nechal jsem si to vypsat ve fci createCacheStorage() V třídě NConfigurator (libs/Nette/common/Configurator.php ř.385).
Laděnka:
<?php
...\libs\Nette\common\Configurator.php:386 source ▼ NFileStorage-> __construct (arguments ▼)
$dir
"%tempDir%/cache" (15)
$journal
NFileJournal(9) ▼ {
"file" private => "C:\Users\Martin\Documents\NetBeansProjects\sap\document_root/../temp/btfj.dat" (77)
"handle" private => stream resource
"lastNode" private => 2
"lastModTime" private => NULL
"nodeCache" private => array(0)
"nodeChanged" private => array(0)
"toCommit" private => array(0)
"deletedLinks" private => array(0)
"dataNodeFreeSpace" private => array(0)
}
379: */
380: public static function createCacheStorage(IDiContainer $container)
381: {
382: $dir = $container->expand('%tempDir%/cache');
383: umask(0000);
384: @mkdir($dir, 0777); // @ - directory may exists
385: NDebugger::dump(NEnvironment::getContext()->getParam('tempDir'));
386: return new NFileStorage($dir, $container->getService('Nette\\Caching\\ICacheJournal'));
387: }
388:
389:
390:
391: /**
392: * @return ICacheStorage
393: */
...\libs\Nette\common\Callback.php:88 source ▼ NConfigurator:: createCacheStorage (arguments ►)
81: */
82: public function invoke()
83: {
84: if (!is_callable($this->cb)) {
85: throw new InvalidStateException("Callback '$this' is not callable.");
86: }
87: $args = func_get_args();
88: return call_user_func_array($this->cb, $args);
89: }
...\libs\Nette\DI\Container.php:118 source ▼ NCallback-> invoke (arguments ►)
111: list($factory) = $this->factories[$name];
112: if (!$factory->isCallable()) {
113: throw new InvalidStateException("Unable to create service '$name', factory '$factory' is not callable.");
114: }
115:
116: $this->creating[$name] = TRUE;
117: try {
118: $service = $factory->invoke($this);
119: } catch (Exception $e) {}
120:
121: } elseif (method_exists($this, $factory = 'createService' . ucfirst($name))) { // static method
122: $this->creating[$name] = TRUE;
123: try {
124: $service = $this->$factory();
125: } catch (Exception $e) {}
...\libs\Nette\common\Configurator.php:435 source ▼ NDiContainer-> getService (arguments ►)
428: /**
429: * @return NRobotLoader
430: */
431: public static function createRobotLoader(IDiContainer $container, array $options = NULL)
432: {
433: $loader = new NRobotLoader;
434: $loader->autoRebuild = isset($options['autoRebuild']) ? $options['autoRebuild'] : !$container->getParam('productionMode');
435: $loader->setCacheStorage($container->getService('Nette\\Caching\\ICacheStorage'));
436: if (isset($options['directory'])) {
437: $loader->addDirectory($options['directory']);
438: } else {
439: foreach (array('appDir', 'libsDir') as $var) {
440: if ($dir = $container->getParam($var, NULL)) {
441: $loader->addDirectory($dir);
442: }
inner-code NConfigurator:: createRobotLoader (arguments ▼)
$container
"Nette\Caching\ICacheStorage" (27)
inner-code:2 call_user_func (arguments ►)
...\libs\Nette\common\Callback.php:88 source ▼ __lambda_func (arguments ►)
81: */
82: public function invoke()
83: {
84: if (!is_callable($this->cb)) {
85: throw new InvalidStateException("Callback '$this' is not callable.");
86: }
87: $args = func_get_args();
88: return call_user_func_array($this->cb, $args);
89: }
...\libs\Nette\DI\Container.php:118 source ▼ NCallback-> invoke (arguments ►)
111: list($factory) = $this->factories[$name];
112: if (!$factory->isCallable()) {
113: throw new InvalidStateException("Unable to create service '$name', factory '$factory' is not callable.");
114: }
115:
116: $this->creating[$name] = TRUE;
117: try {
118: $service = $factory->invoke($this);
119: } catch (Exception $e) {}
120:
121: } elseif (method_exists($this, $factory = 'createService' . ucfirst($name))) { // static method
122: $this->creating[$name] = TRUE;
123: try {
124: $service = $this->$factory();
125: } catch (Exception $e) {}
...\libs\Nette\common\Configurator.php:253 source ▼ NDiContainer-> getService (arguments ►)
246: foreach ($config->mode as $mode => $state) {
247: $container->setParam($mode . 'Mode', (bool) $state);
248: }
249: }
250:
251: // auto-start services
252: foreach ($runServices as $name) {
253: $container->getService($name);
254: }
255:
256: return $config;
257: }
258:
259:
260:
...\libs\Nette\common\Environment.php:456 source ▼ NConfigurator-> loadConfig (arguments ►)
449: /**
450: * Loads global configuration from file and process it.
451: * @param string file name
452: * @return ArrayObject
453: */
454: public static function loadConfig($file = NULL)
455: {
456: return self::getConfigurator()->loadConfig(self::getContext(), $file);
457: }
...\app\bootstrap.php:25 source ► NEnvironment:: loadConfig (arguments ►)
18: // Step 2: Configure environment
19: // 2a) enable NDebug for better exception and error visualisation
20: NDebugger::$strictMode = TRUE;
21: NDebugger::enable(NDebugger::DEVELOPMENT);
22:
23:
24: // 2b) load configuration from config.ini file
25: NEnvironment::loadConfig();
?>
Ještě jsem nikdy před tím na nette fórum laděnku nedával tak snad to bude aspoň trochu čitelný.
- Patrik Votoček
- Člen | 2221
zkus ještě zaměnit
dump(Nette\Environment::getContext()->getParam('tempDir'));
za
dump($container->getParam('tempDir'));
mělo by to být stejné
jako předchozí dump… ale jeden nikdy neví…
jinka když řeknu hoď sem laděnku myslím tím odkaz na stažení HTML souboru (i s JavaScriptem – aby fungoval expand) takhle se to blbě čte.
a ještě mě napadá holý nette sandbox ti funguje?
- marek-m
- Člen | 66
aj ja hlasim tuto chybu, na php5.2 pre nette 5.2, ak je vsak server na php5.3 nette pre 5.2 ide ok, napr. link:http://nette.itmava.eu/
Editoval marek-m (16. 5. 2011 10:25)
- marek-m
- Člen | 66
ide o priklad z example Modules-Usage, aj ja to tam vidim :-), to security si nevsimajte link:http://nette.itmava.eu/…/config.neon
- washo
- Člen | 88
Vyresili jste nejak tento problem? Mam taky problem s tim, ze mi to nenacte do configu %tempDir% kdyz pouziju:
NEnvironment::loadConfig();
opravil jsem si to takto:
NEnvironment::setVariable('tempDir', TEMP_DIR);
NEnvironment::loadConfig();
ale myslim ze by to melo spravne fungovat i bez toho ??
V sandboxu s DI mi to funguje
PHP 5.2.17
Apache/2.2.19 (Win32) PHP/5.2.17
Nette Framework 2.0-beta (revision f2ae1ce released on 2011–06–22)
Editoval washo (22. 6. 2011 22:18)