VSDBPro vairāku konfigurāciju režīmā

Labas dienas,

 

Šoreiz ir stāsts par Visual Studio for DB Professionals un problēmu, ar kuru varētu saskarties daudzi, kas šo rīku lieto, vai arī tie, kuriem ir jānodrošina dažāda veida konfigurācijas vides, kurās sistēma var tikt darbināta.

Tātad zemāk ir izklāstīta apmēram uzburtā ainiņa par projektu X, tā primitīvo datu struktūru un risināmo problēmu:

  • projekts satur 1 tabulu (Table1), kurā glabājās, piemēram, klasifikatoru vērtības;
  • tabula satur 2 kolonas (column_1 (int), column_2 (int));
  • šī projekta datu bāzes uzturēšanas un pārvaldības nolūkiem izstrādātāju komanda izmanto VSDBPro rīkus;
  • projektam ir dažādas konfigurācijas (developer, QA, staging, production, client Y, client Z, utt);
  • katrai šai konfigurācijai ir atšķirīgi Table1 ieraksti, kas reālā dzīvē varētu atspoguļoties, kā ražošanas vides uzstādījumi nebūt nav tādi paši kā izstrādātāja lokālās instalācijas vērtības;

 

Lai sekmīgi risinātu šāda veida problēmas, mēs varam izmantot šī rīka piedāvāto iespēju: Variables.

image

Tātad pieņemsim, ka mums ir sekojoša tabula:

CREATE TABLE [dbo].[Table1]
(
    column_1 int NOT NULL, 
    column_2 int NULL
);

 

Lai mēs aizpildītu šo tabulu, mums visērtākais veids kā to izdarīt, ir izmantojot Post-Deployment skriptus un konkrēti "Script.PostDeployment.sql". Šis fails tiek izpildīts (jeb iekļauts būvējuma galarezultāta failā gandrīz pašās beigās).

Failā mēs varam izmantot standarta sqlcmd.exe sintaksi, jo dienas beigās MSBuild tik tiešām izmanto šo rīku, lai izpildītu SQL pieprasījumus pret izmantojamo datu bāzi.

Tātad Script.PostDeployment.sql failā mēs varam iekļaut jau iepriekš izveidotu failu, kas saturēs mūsu izstrādātāja lokālās instalācijas vides uzstādījumus, piemēram:

INSERT INTO Table1 VALUES (1, 2);

 

Pieņemsim, ka šīs vērtības ir izstrādātāja lokālās instalācijas gadījumā. QA instalācijai ir nepieciešamas vērtības attiecīgi 3 un 4.

Tas nozīmē, ka mums kaut kādā veidā ir jāspēj parametrizēt šis skripts. Šim nolūkam izmantosim:

  • projekta konfigurācijas (uzstāda izmantojot Configuration Manager);
  • projekta mainīgos, kurus var uzstādīt katrai konfigurācijai savus;

 

Šim nolūkam izmantojam Configuration Manager un izveidojam 2 jaunas konfigurācijas shēmas:

image

 

Tālāk mēs nokonfigurējam mums nepieciešamos mainīgos:

  • Developer: Config=Developer
  • QA: Config=QA

 

Starpcitu, šie mainīgie ir pieejami .sqlproj failā:

<PropertyGroup Condition=" '$(Configuration)' == 'Developer' ">
  <SetVariables>
    <Variable Name="Config" Value="Developer" />
  </SetVariables>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'QA' ">
  <SetVariables>
    <Variable Name="Config" Value="QA" />
  </SetVariables>
</PropertyGroup>

 

Tālāk mums ir jāķeras pie paša datu aizpildīšanas skripta parametrizēšanas:

IF '$(Config)' = 'Developer'

    INSERT INTO Table1 VALUES (1, 2);

ELSE IF '$(Config)' = 'QA'

    INSERT INTO Table1 VALUES (3, 4);

 

Šeit mēs salīdzinām mūsu norādīto attiecīgās konfigurācijas shēmas definēto mainīgā $(Config) vērtību.

Tālāk mēs esam gatavi Build un Deploy komandām.

Ja pēc Build mēs aplūkojam ģenerēto .sql failu, tad nonākam līdz šādai rindiņai:

-- =============================================
-- Script Template
-- =============================================

IF '$(Config)' = 'Developer'

    INSERT INTO Table1 VALUES (1, 2);

ELSE IF '$(Config)' = 'QA'

    INSERT INTO Table1 VALUES (3, 4);

GO

 

Ja aplūkojam rūpīgāk šo ģenerēto failu, tad secinām, ka šāds mainīgais nemaz pašā failā nav definēts.

Drošības pēc izlaidīsim Deploy komandu:

image

 

SQL vaicājuma galarezultāts liek mums domāt, ka tomēr skripts ir izpildījies, lai arī pašā .sql ģenerētajā failā šāds mainīgais nav definēts.

Papētot sīkāk, kā notiek VSDBPro deployment scenārijs nonācu pie secinājuma, ka deploy periodā Visual Studio rīks pats izsauc sqlcmd.exe komandrindiņu ar attiecīgiem parametriem, kas ir definēti konkrētajai konfigurācijas shēmai.

Šis piegājiens man šķiet nevisai draudzīgs, jo ir viena problēma, tu ģenerēto .sql failu nevari iekļaut būvējumā kā datu bāzes initial vai papildinājumu skriptus, jo tie vienkārši ārpus Visual Studio neizpildīsies sekmīgi.

 

Tātad risinājums šeit varētu būt sekojošs: palasot rūpīgāk VSDBPro 2008 Power Tools pašās beigās kā pēdējā no iespējām tiek minēta mistiska sqlspp.exe komanda, kas ir pieejama komandrindiņas versijā un kas it kā "atver" (expand) visus sqlcmd iekļāvumus un mainīgos. Pēc pirmām 2 izlasīšanas reizēm es nesapratu, ko šis mazais rīks dara, līdz kamēr neizdomāju to izmēģināt.

Tātad, ja mēs rīku izsaucam apmēram šādi:

sqlspp.exe /i:Database.sql /o:Database-Expanded.sql /p:Config=Developer

 

Tad mēs iegūstam jaunu failu, kura nosaukums ir Database-Expanded.sql. Šis jaunais ģenerētais fails satur šādu SQL kodu:

IF 'Developer' = 'Developer'

    INSERT INTO Table1 VALUES (1, 2);

ELSE IF 'Developer' = 'QA'

    INSERT INTO Table1 VALUES (3, 4);


GO

 

Tas nozīmē, ka mēs esam panākši mums vēlamo funckionalitāti.

Nākamais solis ir šo komandrindiņu pielikt klāt pie būvējuma darbībām (post-build events):

image

 

Komanda, kas jāraksta notikumā ir šāda:

"C:\Program Files\Microsoft Visual Studio 9.0\DBPro\sqlspp.exe" /i:"$(ProjectDir)$(OutputPath)Database.sql" /o:"$(ProjectDir)$(OutputPath)Database-Expanded.sql" /p:Config=$(Configuration)

 

Ļoti iespējams, ka VSDBPro instalācijas direktoriju būtu jāmēģina atrast caur reģistirem, bet šim es neveltīju vairāk par 5 min.

 

Tas arī viss principā. Jā un vēl - šāda veida pieeja ļauj arī automatizēti veidot nepieciešamos būvējumu skriptus, kurus var iegūt un ģenerēt nakts būvējumu laikā būvējot Sql projektu attiecīgajā konfigurācijas shēmā.

 

Cerams, ka noderēs!

Published Wednesday, April 23, 2008 1:13 AM by valdis.iljuconoks

Comments

# re: VSDBPro vairāku konfigurāciju režīmā

SQLSPP protams var atrast arī pēc vecum vecās PATH tehnoloģijas :)

Wednesday, April 23, 2008 7:33 AM by davis.kulis

# re: VSDBPro vairāku konfigurāciju režīmā

Ienesīgs darbs mājās

Pelniet tik cik Jūs vēlaties, ērtos mājas apstākļos. Lieliski ieņēmumi ar mājas datora palīdzību.

Daļēja vai pilna aizņemtība pēc Jūsu izvēles. Izpeļņa - no Ls200/ned. (atkarībā no paveiktā).

Informācijas saņemšanai rakstiet kristineint@inbox.lv

Wednesday, February 03, 2010 2:35 PM by kristine

# TezLTOZporiPYArH

z2ixNt Thanks-a-mundo for the blog.Really looking forward to read more.

Saturday, March 24, 2012 12:00 PM by google+ hangouts

Leave a Comment

(obligāts) 
(obligāts) 
(brīvizvēles)
(obligāts)