File ‚%appDir%/config.ini‘ is missing or is not readable
- Rampa
- Člen | 65
Ahoj ve spolek.
Stáhnul jsem Nette 2.0a a zkusil si na hostingu udělat sandbox. Checker mi to
projel, že jako vše ok (až na MagicImg, ale to nepotřebuju). Na lokále se
mi zobrazí standart Homepage:default, ale na hostingu mi to vyhodí
File '%appDir%/config.ini' is missing or is not readable.
při
pokusu `Environment::loadConfig();
` v bootstrapu.
V laděnce v sekci Environment jsou cesty vypsaný správně, tak nevím, kde
by mohl být pohřbený pes.
Webhosting jsem použil endora.cz … Asi to není ideální hosting, ale je to
zadarmo, tak na sandbox to musí stačit :)
- Rampa
- Člen | 65
Tak se v tom hrabu už druhý den a nejedeto…
Chyba bude asi v překladu %appDir%. Kde se vubec bere tato proměná? Hledal
jsem ve zdrojáku, ale nikde jsem definici nenašel, jen její použití
v config.ini a Configurator.php. V Nete 0.9 se to definovalo jako promená
Envitonmentu, ale v 2.0 už to tam není a když si dám
Debug::bardump(Environment::getVariables()), tak je to prázdný :(
- net-vor
- Člen | 35
Konstanta APP_DIR se definuje v souboru index.php
v adresáři
document_root, odtud se bere. Problém by podle mě mohl být v tom, že na
hostingu budou jinak nastavené cesty k document_rootu, než máš na
localhostu. Tohle někdy může být trochu utrpení, ale zkusil bych
zakverdlovat s nastavením v index.php, případně si nechat vypsat, jaké
adresáře se vlastně pod těmi konstantami skrývají, to by mohlo leccos
odhalit.
Jinak free hosting bych rychle opustil, je to sice zadarmo, ale k čemu to je, když je to bastl, mají to blbě nastavené a nic tam neběhá…
Editoval net-vor (15. 11. 2010 19:21)
- Rampa
- Člen | 65
O konstantě APP_DIR vím, kde se tvoří a ta je v pořádku, ale Nette využívá svojí proměnou appDir z Envirnmentu a tu jsem nenašel kde se iniciailizuje… :(
Tak po dalším bádání jsem zjistil, že mi nefunguje funkce z Environmentu:
<?php
public static function expand($var)
{
static $livelock;
if (is_string($var) && strpos($var, '%') !== FALSE) {
return @preg_replace_callback(
'#%([a-z0-9_-]*)%#i',
function ($m) use (& $livelock) {
list(, $var) = $m;
if ($var === '') return '%';
if (isset($livelock[$var])) {
throw new \InvalidStateException("Circular reference detected for variables: "
. implode(', ', array_keys($livelock)) . ".");
}
try {
$livelock[$var] = TRUE;
$val = Environment::getVariable($var);
unset($livelock[$var]);
} catch (\Exception $e) {
$livelock = array();
throw $e;
}
if (!is_scalar($val)) {
throw new \InvalidStateException("Environment variable '$var' is not scalar.");
}
return $val;
},$var); // intentionally @ due PHP bug #39257
}
return $var;
}
?>
preg_replace_callback vůbec neproběhne a místo stringu s nahrazenou proměnou mi to vrátí zpět původní string. Pokud vyhodím shut up zavináč, tak to hodí chybu Parametr 2 is not fuction. A PHP tam je 5.3.3
Editoval Rampa (16. 11. 2010 8:00)
- Mikulas Dite
- Člen | 756
Jestli se nepletu, tak pokud dáš pryč ten zavináč, dává to chybu s closure != callback. Taky mi tohle na jednom hostingu nějak nefungovalo, ale přešel jsem jinam, takže jsem to neřešil.
- Rampa
- Člen | 65
Přesněji řečeno, hází to warning
preg_replace_callback(): Requires argument 2, '', to be a valid callback
=========================================================================================
** VYŘEŠENO **
=========================================================================================
Takže zakopaná sabáka (neboli hund) je v eAcceleratoru.
Stačí dát do .htaccess:
php_flag eaccelerator.enable 0
php_flag eaccelerator.optimizer 0
Tak kdyby s tím někdo zápasil, tak jsem mu snad ušetřil čas :-)
Editoval Rampa (16. 11. 2010 10:18)