Více vývojových prostředí a SVN

- josef.sabl
 - Člen | 153
 
Jak přistoupit správně k tomuto problému?
- Je nás víc vývojářů jedné aplikace, kteří máme na localhostech jiná nastavení (např. hesel pro přístup do databáze).
 - Aplikaci máme v SVN a protože config.neon je zásadní soubor ovlivňující vlastnosti aplikace (nejen hloupou konfiguraci hesel do databáze), máme v SVN i ten.
 
Jenže tyhle dvě věci jaksi nejdou dohromady, protože config.neon pak máme všichni stejný. Existuje více možností, jak to řešit, ale všechny mi přijdou jako kompromisy a workaroundy, což mi nesedí k filozofii Nette. Je to nečisté, zdržuje to při práci a je to potenciální zdroj chyb, problémů a bezpečnostních děr.
Možnosti, jako to obejít:
- Mít na všech localhostech stejné nastavení prostředí. config.neon budeme mít v SVN a všichni stejný.
 - Mít v SVN jen jakýsi vzorový config.neon.example. Všechny změny provedené do vlastního config.neon, který nebude v SVN promítat i do examplu
 - Mít jediný config.neon, který bude v SVN. Po updatu si každý upraví hodnoty tak, aby mu to běželo a bude dávat pozor, aby to necommitnul zpátky. Když commitne, ostatním to na localu rozbije a bude na souboru v SVN falešná změna.
 
Stejný problém, avšak s daleko horšími důsledky nastane v případě, že budu aplikaci provozovat na více produkčních serverech najednou (a pokaždé s jinou konfigurací).
Existuje nějaká možnost, která bude mít lepší vlastnosti, než ty tři mnou vyjmenované?
Mě napadlo následující, ale Nette zřejmě něco takového neumí:
- Možnost existence více .neonů, např. config.neon a local.neon. local.neon by hodnotami v něm přepisoval hlavní config.neon. Ty, které by sám neobsahoval, by nechal.
 - Lepší by asi bylo, aby se local.neon jen prachsprostě přilepil na konec config.neon, protože neon sám o sobě už mechanismus na dědění má.
 - Include pro config.neon. Potom v sekci parameters: bych mohl uvést něco jako include: local.neon
 - Možnost definovat běhové prostředí přítomností souboru na disku, který by nebyl v SVN
 
Čtyřka je nejschůdnější z pohledu realizace i bez zásahu do Nette, ale zase má tu nepříjemnost, že nutí uživatele do SVN publikovat svoje nastavení databáze.
Což je obecně problém config.neon v SVN: Mám aplikaci, jejíž kód/repozitář chci zveřejnit, ale musím v něm mít uvedená hesla.
Editoval josef.sabl (12. 1. 2012 17:49)

- Filip Procházka
 - Moderator | 4668
 
Můžeš si vynutit přítomnost souboru tím, že použiješ sekci includes, v hlavním configu
includes:
	- config.local.neon
...
Nebo to podmíníš v boostrap.php
// Configure application
$configurator = new Nette\Config\Configurator;
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->addConfig(__DIR__ . '/config/config.neon');
if (file_exists($localConfig = __DIR__ . '/config/config.local.neon')) {
	$configurator->addConfig($localConfig);
}
$container = $configurator->createContainer();
					Editoval HosipLan (12. 1. 2012 18:44)

- Acnnair
 - Člen | 34
 
Ja používam ako písal HosipLan includes v hlavnom configu. To je
application.neon (sú tam služby atď.) a v repozitári je
config.local.neon.dist. Na základe toho si každý spraví
config.local.neon, ktorý je nastavený aby bol gitom (svn)
ignorovaný. Ten lokálny neon slúži na nastavenie špecifických parametrov
pre jednotlivé pc (pripojenie na db).

- Patrik Votoček
 - Člen | 2221
 
používám řešení:
// Configure application
$configurator = new Nette\Config\Configurator;
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->addConfig(__DIR__ . '/config/config.neon', FALSE);
if (file_exists($localConfig = __DIR__ . '/config/config.local.neon')) {
        $configurator->addConfig($localConfig, FALSE);
}
$container = $configurator->createContainer();
což se od HosipLanem navrhovaneho reseni lisi pouze v tom ze vůnec nepoužívam „sekce“.

- josef.sabl
 - Člen | 153
 
Výborně!
Teď vidím, že v API přibyl addConfig a loadConfig zmizel. To je přesně
to, co jsem potřeboval.
No dokonce existuje i varianta s include, jak jsem si ji vybájil.
Jsem rád, že mě napadla stejná řešení jako autory Nette :-D
Díky za nasměrování. Škoda jen, že nic z toho se nedá najít v žádné dokumentaci.