Pozycjonowanie stron www.konfiguracja między środowiskami dev, staging i production

Ktoś ma jakieś dobre wskazówki dotyczące radzenia sobie z różnicami w sieci.ustawienia konfiguracji między środowiskami? Rozważałem utworzenie folderu 'config' w naszym systemie kontroli źródeł, ale poza hierarchią sieci web, a proces wdrażania skopiuje odpowiednie pliki konfiguracyjne (web.dev.config, web.inscenizacja.config, web.produkcja.config) do folderu www po wdrożeniu. Widziałem również posty o tym, jak programowo zmieniać ustawienia konfiguracyjne (punkty końcowe WCF, ciągi połączeń itp.), Gdy uruchamia się aplikacja.

Jakie są tu najlepsze praktyki i jakie doświadczenia wszyscy mieli z tymi lub innymi podejściami?

Update Sep 2010

Warto zauważyć, że Visual Studio 2010 dodaje tę zdolność poprzez web.Config transforms . Podczas korzystania z menedżera konfiguracji kompilacji (Build|Configuration Manager...), aby utworzyć różne konfiguracje dla projektu (powiedzmy, Debug, Dev, Staging i Release), VS dodaje web.*.pliki konfiguracyjne do rozwiązania. Na Domyślna strona www.config zawiera ustawienia linii bazowych, których będziesz używać do debugowania. www.uwolnij.config, web.inscenizacja.config, etc zawierają transformacje XSLT, które będą stosowane za każdym razem, gdy opublikujesz swój projekt w oparciu o konfigurację active build.

Author: 3Dave, 2009-09-10

9 answers

W Nowym VS możesz używać Web Config transformations.

Czytaj więcej tutaj: http://msdn.microsoft.com/en-us/library/dd465326.aspx

 15
Author: Schmidty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-20 17:36:51

Moim podejściem było posiadanie wielu plików konfiguracyjnych. Nie ma znaczenia, czy dev, staging, czy produkcja) umieszczam w sieci.plik konfiguracyjny. Wszystko, co jest specyficzne dla środowiska (np. informacje o połączeniu z bazą danych, logowanie, ustawienia debugowania itp.) I umieścić w lokalnym.plik konfiguracyjny specyficzny dla środowiska. Następnie możesz dołączyć lokalne.ustawienia konfiguracyjne w sieci.config using configSource (http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx)

Www.konfigurację można następnie sprawdzić w kontrolce źródłowej. Nie sprawdzaj lokalnych.pliki konfiguracyjne-które zmuszają cię do wdrożenia poprawnego w skryptach wdrażania.

 17
Author: Brian Frantz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-14 15:03:11

Używam CruiseControl.NET/NAnt NAnt ma zadanie XMLPoke, które pozwala Ci wejść w trakcie budowania i zmienić dowolne ustawienia konfiguracji za pomocą zapytań XPath.

Więc w każdym z moich celów budowania (DEV, UAT, STAGING itp.) ustawiam kilka właściwości, a następnie wywołuję master build target. Master build target pobiera wartości wszystkich właściwości i XMLPokes je do config i buduje.

 9
Author: Jason Punyon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 16:11:50

Jedną z metod, którą widziałem i używałem, jest ustawienie kluczy w sieci.config do rozróżniania komputerów po nazwie.

Więc na przykład:

<add key="comp1.Environment"       value="DEV"/>
<add key="compdb1.Environment"     value="PROD"/>
<add key="compstage.Environment"    value="STAGE"/>

Oczywiście comp1, compdb1 są rzeczywistymi nazwami komputerów.

Wtedy ustawisz coś w stylu:

<add key="KeyName,DEV"   value="DevEnvironmentValue"/>

W kodzie trzeba by sprawdzić, w jakim środowisku jest uruchomiona aplikacja, a następnie uzyskać odpowiedni klucz, tak na przykład.

private string GetKeyValue() {
    string machineName  = String.Concat(System.Environment.MachineName, ".Environment");
    string environment  = ConfigurationManager.AppSettings[machineName];
    string key          = String.Concat("KeyName", ",", environment);
    string keyValue       = ConfigurationManager.AppSettings[key];

    return keyValue;
}
 8
Author: Jack Marchetti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 16:22:29

Istnieje typ projektu o nazwie Web Deployment project , dostępny bezpłatnie od firmy Microsoft, który pozwala ci to zrobić. Możesz zastąpić sekcje swojej sieci.config, w zależności od konfiguracji rozwiązania (debug, release itp.) Używamy tego przez ponad rok i działa dobrze. Jest dostępny dla VS2005 i VS2008.

Hope this will help

 3
Author: mberube.Net,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 17:00:04

Podczas gdy niektóre inne odpowiedzi mogą być bardziej odpowiednie, dodam tylko, że Matt Berseth rozwinął swoją własną metodę w 2007 roku...

Podsumowując, przechowuje wszystkie wartości, które różnią się między środowiskami w zastrzeżonym pliku tekstowym i używa niestandardowego narzędzia podczas procesu budowania, aby scalić wartości do .pliki konfiguracyjne.

W komentarzu do tego wpisu Doron Yaacoby również komentuje:

" w społeczności MSBuild jest zadanie Zadania, które mogą to osiągnąć (i więcej) dla ciebie, co nazywa się XmlMassUpdate. pisałem o tym na moim blogu "

 3
Author: rohancragg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-18 15:06:17

Oto jak dodać różne konfiguracje, które można dostosować do środowisk wdrożeniowych w VS2012

  1. Kliknij prawym przyciskiem myszy na rozwiązaniu i wybierz configuration manager
  2. Kliknij przycisk Menedżer konfiguracji
  3. w kolumnie Konfiguracja wybierz pole combo względem projektu że chcesz dodać konfigurację i wybrać
  4. Utwórz nową konfigurację o nazwie TEST i copy settings od wydania i sprawdź Utwórz nowe rozwiązanie pole wyboru konfiguracji
  5. Kliknij prawym przyciskiem myszy na stronie.config
  6. Dodaj Config Transform
  7. potem dostajesz dodatkową sieć.config np web.TEST.config

Po tym trzeba zmodyfikować web.TEST.konfiguracja niektórych przekształceń specyficznych dla środowiska testowego

 3
Author: Nigel Findlater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-09 10:28:51

Musisz zainstalować dla środowiska, a nie budować dla niego. W realnym świecie musisz zainstalować w prod to, co było testowane w QA, bez przebudowy dozwolone. Przynajmniej w moim świecie tak jest.

 1
Author: Monty Shaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-31 15:13:03
 Easy way to have that is having an Enumeration , then having a switch statement based on the server name ( if its stable name ) .  
 Call GetURIPath() where ever you require to fetch details , here I given the examples for url's used 


public class StaticData
{
    public enum enumEnvironment
    {
        envNONE = 0,
        envLOC = 1,
        envDEV = 2,
        envTEST = 3,
        envPROD = 4
    }
     private static enumEnvironment GetCurrentEnv()
    {
        if (ConfigurationManager.GetSection("DBSettingsGroup/DBSettings") == null && ConfigurationManager.GetSection("DBSettings") == null)
        {
            return enumEnvironment.envLOC;
        }
        else
        {
            NameValueCollection NVCollection = new NameValueCollection();
            NVCollection = (NameValueCollection)ConfigurationManager.GetSection("DBSettingsGroup/DBSettings");
            if(NVCollection == null)
            {
                NVCollection = (NameValueCollection)ConfigurationManager.GetSection("DBSettings");
            }

            string sEnv = NVCollection.GetValues("serverrole").ToString();

            switch (sEnv.ToUpper())
            {
                case "DEV-ISOLATED":
                    return enumEnvironment.envDEV;
                case "DEVELOPMENT":
                    return enumEnvironment.envDEV;
                case "TEST":
                    return enumEnvironment.envTEST;
                case "PRODUCTION":
                    return enumEnvironment.envPROD;
                default:
                    return enumEnvironment.envNONE;
            }
        }
    }
   public static string GetURIPath()
    {
        switch (GetCurrentEnv())
        {
            case enumEnvironment.envPROD:
                return "http://produrl/yourapp/api/";
            case enumEnvironment.envTEST:
                return "http://testurl/yourapp/api/";
            case enumEnvironment.envDEV:
                return "http://devurl/yourapp/api/";
            default:
                return "http://localhost/yourapp/api/";
        }
    }

}

 0
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-25 15:08:35