Detekce prostředí nefunguje při specifikaci debug mode ip adres

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Sonny
Člen | 13
+
0
-

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
Unlink
Člen | 298
+
0
-

No to je logické, ak zapneš debug, tak aplikácia beží v development režime.

Sekcie v configu sú v poslednej verzi (2.4) už deprecated a na konfiguráciu na rôznych prostrediach sa používajú config.local.neon súbory.

Sonny
Člen | 13
+
0
-

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)