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

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

Jak přistoupit správně k tomuto problému?

  1. Je nás víc vývojářů jedné aplikace, kteří máme na localhostech jiná nastavení (např. hesel pro přístup do databáze).
  2. 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:

  1. Mít na všech localhostech stejné nastavení prostředí. config.neon budeme mít v SVN a všichni stejný.
  2. 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
  3. 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í:

  1. 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.
  2. 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á.
  3. Include pro config.neon. Potom v sekci parameters: bych mohl uvést něco jako include: local.neon
  4. 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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.

22
Člen | 1478
+
0
-

Díky za nasměrování. Škoda jen, že nic z toho se nedá najít v žádné dokumentaci.

RDPanek
Člen | 189
+
0
-

Používáme:

  • config.neon # globalni hodnoty nezavisle na nastaveni localhostu
  • config.local.neon.example # zavisle na konkretnim vyvojari (db, ws, testConfig, …)

na localhostu si jej každý přetvoří na:

  • config.local.neon

který je uveden v .gitignore