Detekce prostředí nefunguje při specifikaci debug mode ip adres
- Sonny
- Člen | 13
Dobrý den,
po dlouhé době jsem se dostal k aktualizaci Nette v několika aplikacích. Do teď vše běželo s Nette 2.0.10. Teď nasazujeme aktuální 2.3.10.
Mám problém s detekcí prostředí (production vs development).
Používám společný config.neon, kde jsou odlišeny sekce pro jednotlivé
prostředí. Všechno funguje správně jak na localhostu, tak na ostrém
serveru, pokud v bootstrapu nenastavím pole s ip adresami
v $configurator->setDebugMode(array("ip"));
Pokud tam nastavím ip adresy, ze kterých by měl být viditělný debug bar a laděnka i na produkčním serveru, tak pokaždé (z localhostu i na produkčním serveru) se při přístupu z těchto adres použije konfigurace z development sekce. Pokud přistoupím z jiné adresy než je v daném poli, tak rozpoznání funguje správně.
Dokázal by mi někdo poradit?
bootstrap.php
<?php
// Load Nette Framework or autoloader generated by Composer
require __DIR__ . '/../libs/autoload.php';
$configurator = new Nette\Config\Configurator;
// Enable Nette Debugger for error visualisation & logging
$configurator->setDebugMode(array("ip"));
$configurator->enableDebugger(__DIR__ . '/../log');
// Specify folder for cache
$configurator->setTempDirectory(__DIR__ . '/../temp');
// Enable RobotLoader - this will load all classes automatically
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->addDirectory(__DIR__ . '/../libs')
->register();
// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon', $configurator::AUTO);
//$configurator->addConfig(__DIR__ . '/config/config.local.neon', $configurator::NONE); // none section
$container = $configurator->createContainer();
return $container;
config.neon
common:
parameters:
cacheTime: 1 seconds
cacheTimeLong: 1 seconds
php:
date.timezone: Europe/Prague
#zlib.output_compression: yes
application:
errorPresenter: Error
session:
expiration: 14 days
services:
...
routerFactory: RouterFactory
router: @routerFactory::createRouter
production < common:
parameters:
cacheTime: 60 seconds
cacheTimeLong: 3600 seconds
- Sonny
- Člen | 13
A to právě podle mě logické není. Alespoň ve starších verzí Nette tomu tak nebylo. Povolení debug módu nemělo žádný vliv na režim, v jakém běžela aplikace.
Jinými slovy:
Na lokále běžela aplikace jako development a bylo povoleno zobrazování
laděnky, debug baru (momentálně mi funguje)
Na serveru běžela aplikace vždy jako production a veškeré chyby se logovaly do souborů (momentálně mi funguje)
ALE pokud jsem k této aplikaci na produkčním serveru přistoupil z konkrétní ip, tak aplikace pořád běžela jako production, ale laděnka a debug bar se zobrazovaly (to je to, co mi nyní nefunguje)
A tohoto chování bych potřeboval docílit i se současnou verzí Nette. Jestli konfigurace bude v neonu v sekcích nebo v samostatných souborech pro jednotlivé prostředí je mi už celkem jedno.
Jako dočasné řešení mám upravený bootstrap a rozdělený config, ale nechce se mi věřit, že by tato vlastnost z Nette zmizela. O rozdělení configu mi ani tak moc nejde. Spíš mi jde o tu logiku, kterou dříve řešilo samotné Nette.
upravený bootstrap.php
<?php
// Load Nette Framework or autoloader generated by Composer
require __DIR__ . '/../libs/autoload.php';
$configurator = new Nette\Config\Configurator;
// Enable Nette Debugger for error visualisation & logging
$configurator->setDebugMode(array("ip"));
...
// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$devAddreses = array(
'127.0.0.1',
'192.168.1.200'
);
if(in_array($_SERVER['REMOTE_ADDR'], $devAddreses)) {
$configurator->addConfig(__DIR__ . '/config/config.local.neon'); // none section
}
$container = $configurator->createContainer();
return $container;
Editoval Sonny (27. 5. 2016 18:22)