Nastavení produkčního módu na základě url adresy

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

Zdarvím,

v předchozí verzi Nette jsem měl v bootstrap.php takovouhle zběsilou záležitost

<?php
/**
 * Loading nette framework
 */
 require(LIBS_DIR.DS.'Nette'.DS.'nette.min.php');

/**
 * Development workaround
 */
 if(($_SERVER['SERVER_NAME']=="project-prod.localhost")&&($_SERVER["SERVER_ADDR"]=="127.0.0.1")){
     Nette\Environment::setMode(Nette\Environment::DEVELOPMENT,FALSE);
     Nette\Environment::setMode(Nette\Environment::PRODUCTION,TRUE);
     Nette\Environment::setName('production');
 }

/**
 * Loading config
 */
 Nette\Environment::loadConfig();

/**
 * Setting Debug
 */
 if(Nette\Environment::getName()=='development'){
     NetteTranslator\Panel::register();
     Nette\Debug::$strictMode = TRUE;
     Nette\Debug::enable(Nette\Debug::DEVELOPMENT,Nette\Environment::getVariable("logDir"));
 } elseif(Nette\Environment::getName()=='production'){
     Nette\Debug::$strictMode = FALSE;
     Nette\Debug::enable(Nette\Debug::PRODUCTION,Nette\Environment::getVariable("logDir"), Nette\Environment::getVariable('technicalSupportEmail'));
 }
?>

Díky tomu jsem mohl na svém vývojovém stroji testovat, jak se chová aplikace na produkčním prostředí.
Dnes už se to takhle dělat nedá. Chci se tedy zeptat:

  • jak se nastavuje produkční prostředí
  • jak se správně dotazuje v jakém jsem prostředí
22
Člen | 1478
+
0
-

Mám takový pocit, že sice jsi v sekci DI, ale nepřečtl jsi o tom ani jedno slovo tady, jinak by ses asi takhle neptal. Takže pro začátek si projdi sandbox z poslední bety a pak ti bude jasný kod níže:

//v bootsrapu si zkus:
echo $configurator->container->params['productionMode'];
dump($configurator->container->params);

Editoval 22 (9. 11. 2011 12:43)

2bfree
Člen | 248
+
0
-

Docela hodně jsem o tom četl všude možně. Sandboxem jsem se probral a o existenci
$configurator->container->params[‚productionMode‘] vím.

Nevěděl jsem však, zda-li je to dnes jediný a tedy oficiálně správný způsob detekce prostředí, nebo jestli existuje někde getMode setMode.

2bfree
Člen | 248
+
0
-

Takže pro úplnost, kdyby někdo řešil stejný problém jako já, tak bootstrap.php v nové podobě vypadá takto:

<?php
use Nette\Diagnostics\Debugger,
    Nette\Application\Routers\Route;

// Load Nette Framework
$params['libsDir'] = __DIR__ . '/../libs';
require $params['libsDir'] . '/Nette/loader.php';

// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->container->params += $params;
$configurator->container->params['tempDir'] = __DIR__ . '/../temp';
$container = $configurator->loadConfig(__DIR__ . '/config.neon');

// Development workaround
if(($_SERVER['SERVER_NAME']=="project-prod.localhost")&&($_SERVER["SERVER_ADDR"]=="127.0.0.1")){
    $configurator->container->params['productionMode']=TRUE;
}

// Enable Nette Debugger for error visualisation & logging\
if($configurator->container->params['productionMode']){
    Debugger::$strictMode = TRUE;
    Debugger::enable(Debugger::PRODUCTION, __DIR__ . '/../log',$configurator->container->params['technicalSupportEmail']);
} else {
    Debugger::$strictMode = TRUE;
    Debugger::enable(Debugger::DEVELOPMENT, __DIR__ . '/../log');
}

// Setup router
$router = $container->router;
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');


// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();
?>
22
Člen | 1478
+
0
-

v config.neon to můžeš nastavit nebo manuálně v bootstrapu prostým přiřazenim TRUE. Žádný setter/getter na to myslím není…

2bfree
Člen | 248
+
0
-

Pak je tedy postup co jsem psal v pořádku. Děkuji za spolupráci.