Nette + database + Json-RPC2 – problem s cachi
- skrivy
- Člen | 52
Ahoj,
resim ted zajimavy problem s Nette 2.0.10 a posledni verzi Json-rcp2.
Pri requestu pres json-rpc2, ktery pouziva databazi se mi stale vraci chyba:
object(stdClass)#150 (3) {
["jsonrpc"]=>
string(3) "2.0"
["error"]=>
object(stdClass)#145 (2) {
["code"]=>
int(0)
["message"]=>
string(284) "ErrorException: fopen(/var/www/web5/temp/cache/_Nette.Database.4c28907f740a43b60302e51f43258fda/_07414f4e15ca943e6cde032dec85d92f): failed to open stream: No such file or directory
in file /var/www/web5/libs/Nette/Caching/Storages/FileStorage.php
on line 159"
}
["id"]=>
NULL
}
Vygenerovany Nette.Configurator v tempu.
protected function createServiceNette__database__default()
{
$service = new Nette\Database\Connection('mysql:host=;dbname=', '', '', NULL);
// $service->setCacheStorage($this->getService('cacheStorage'));
Nette\Diagnostics\Debugger::$blueScreen->addPanel('Nette\\Database\\Diagnostics\\ConnectionPanel::renderException');
// $service->setDatabaseReflection(new Nette\Database\Reflection\DiscoveredReflection($this->getService('cacheStorage')));
$service->onQuery[] = array(
$this->getService('nette.database.defaultConnectionPanel'),
'logQuery',
);
$service->setCacheStorage(new Nette\Caching\Storages\DevNullStorage);
$service->setDatabaseReflection(new Nette\Database\Reflection\DiscoveredReflection(new Nette\Caching\Storages\DevNullStorage));
return $service;
}
Pokud ty 2 radky zakomentuju, tak vse slape, jak ma. Jenze, config generator je generuje odkomentovane :\
Obsah config.ini:
common:
parameters:
database:
driver: mysql
host:
dbname:
user:
password:
php:
date.timezone: Europe/Prague
nette:
session:
expiration: '+ 14 days'
database:
default:
dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
user: %database.user%
password: %database.password%
services:
nette.database.default:
setup:
- setCacheStorage( Nette\Caching\Storages\DevNullStorage() )
- setDatabaseReflection(Nette\Database\Reflection\DiscoveredReflection( Nette\Caching\Storages\DevNullStorage() ))
Diky za nakopnuti.
- SparkCZ
- Člen | 22
Stává se mi to taky, při použití json-rpc2 doplňku se nevytvoří cache konfigurace databáze, pouze se uloži v jakém by měla být souboru. Zkus nejdřív všechna připojení do db „nacachovat“ ručně někde mimo (zavolej si jeden dotaz do každé tabulky přímo v presenteru mimo json-rpc), pak to bude fungovat. Musíš to opakovat po každém vymazání cache. Zatím jsem nějak nehledal čím to je, takže možná nikdo jiný poradí lepší řešení.
- Bedna
- Člen | 7
Přišel někdo na něco? Mě to teď také zaseklo, ale nechci se zbavovat kompletně cache databáze, jen tedy pro server… Tak jsem dal do RPC presenetru toto a funguje to.
<?php
public function startup()
{
parent::startup();
$database_service = $this->context->getService("nette.database.default");
if ($database_service)
{
$database_service->setCacheStorage(new \Nette\Caching\Storages\DevNullStorage());
}
}
?>
Zkusím ještě popřemýšlet, proč dochází k této chybě.
Editoval Bedna (16. 3. 2014 19:56)
- Bedna
- Člen | 7
Tak jsem řešil další problém a to, že serveru vadí každý notice (což v MPDF a podobných knihovnách není v mých silách opravit). Zkoumal jsem, až jsem došel k tomu, že tam je vlastní error handler. Upravil jsem takto:
<?php
$handler = set_error_handler(array($this, '_errorHandler'), E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
?>
Možná by to vyřešilo i ten problém s cache, tak to kdyžtak zksute, já na to už nemám čas a ani nervy :-D