Jak na development prostředí nastavit DummyStorage pro cache
- JajazXbm
- Člen | 29
Zdravím,
potřeboval bych nastavit cacheování. Cachování mi funguje, ale chtěl bych
cachování vypnout pro development prostředí. Dočetl jsem se, že se na to
hodí DummyStorage. Jenomže nevím jak přesně nastavit, aby se použilo
DummyStorage jenom na development prostředí. Někde jsem se dočetl, že se
dá dát do config.ini tohle:
[development.service!]
Nette-Caching-ICacheStorage = "Nette\Caching\DummyStorage"
Jenomže to my skončí s chybou, že ICacheStorage už je zaregistrováno a nejde znovu zaregistrovat. Proto jsem do bootstrapu přidal toto:
Environment::getServiceLocator()->removeService('Nette\Caching\ICacheStorage');
Dále jsem do config.ini přidal tohle:
[production.service!]
Nette-Caching-ICacheStorage = "Nette\Caching\FileStorage"
Jenomže tohle nefunguje, protože ten FileStorage nemá nastavený žádný adresář do kterého by měl ukládat soubory. A na production modu aplikace končí s chybou:
RuntimeException
Directory name must not be empty.
Takže se ptám. Jde nějak nastavit cachování tak, aby fungovalo pouze na production modu a nikoliv na development modu?
- Filip Procházka
- Moderator | 4668
co zkusit jiný zápis?
[development < common]
service.Nette-Caching-ICacheStorage = DummyStorage
Editoval HosipLan (15. 10. 2009 16:30)
- kravčo
- Člen | 721
Skús
bootstrap.php
if (!Environment::isProduction()) {
$locator = Environment::getServiceLocator();
$locator->removeService('Nette\Caching\ICacheStorage');
$locator->addService('Nette\Caching\ICacheStorage', 'Nette\Caching\DummyStorage');
}
Inak toto podľa mňa nie je úplne v poriadku – prepísanie predvolených nastavení services je predsa prirodzené v duchu convention over configuration. Vyššie popísané nahradzovanie je trochu dosť WTF…
- stpnkcrk
- Generous Backer | 190
Vzpomínal jsem, že jsem kdysi používal DummyStorage, zkusil jsem jeho nastavení i s nejnovější revizí (4572408) a ono to funguje. Zkoušel jsem Nette pro PHP 5.2 i PHP 5.3.
Nicméně, protože Template používá vlastní nastavení CacheStorage, je
potřeba nastavení provést na dvou místech (v config.ini pro
RobotLoader
a ostatní volání
Environment::getCache()
a ideálně v bootstrap.php
pro třídu Nette\Templates\Template
). ;)
config.ini
[development < common] ; Nette pro PHP 5.3
service.Nette-Caching-ICacheStorage = Nette\Caching\DummyStorage
[development < common] ; Nette pro PHP 5.2
service.Nette-Caching-ICacheStorage = DummyStorage
bootstrap.php (zkoušel jsem to na různých místech
bootstrap.php
, na funkčnost to nemělo vliv)
if (!Nette\Environment::isProduction()) { // Nette pro PHP 5.3
Nette\Templates\Template::setCacheStorage(new Nette\Caching\DummyStorage);
}
if (!Environment::isProduction()) { // Nette pro PHP 5.2
Template::setCacheStorage(new DummyStorage);
}
- David Grudl
- Nette Core | 8218
kravčo napsal(a):
Chcel som tým povedať, že na to, aby to šlo lepšie, treba upraviť Nette…
Fixed
- David Grudl
- Nette Core | 8218
V config.ini by mělo tohle fungovat jak v PHP 5.3, tak 5.2
[development < common]
service.Nette-Caching-ICacheStorage = Nette\Caching\DummyStorage