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.