Visual Studio 2010 に SQL 2008 データベース プロジェクトがあり、開発段階でのスキーマ比較から定期的に同期されます。この同じプロジェクトも TFS ソース管理下にあります。Debug と Production の 2 つの環境があります。各環境は、IIS と SQL Server の両方を実行する単一のマシンです。ただし、実稼働環境では、データベース D:\Data\ および E:\Logs\ と標準の c:\program files\sql....\data にある私の開発サーバーのデータとログのパスが異なります。
私がやろうとしているのは、デバッグ環境から実稼働環境への展開を処理する方法をセットアップすることです。WebDeploy 2.1 セットアップを取得し、Web サイト プロジェクトの右クリック コンテキスト メニューを使用して、Visual Studio で展開パッケージをビルドします。RDP を介して運用サーバーに展開パッケージを手動でコピーしたいので、ここでは通信に関する懸念はありません。展開パッケージの設定は、[SQL のパッケージ化/公開] タブで構成されたすべてのデータベースを含めるように設定されています。[SQL のパッケージ化/公開] タブでは、代わりに SQL データベース プロジェクトからデプロイしたいので、既存のデータベースのデータ/スキーマからデータを取得しません。そのため、データベース プロジェクトの /sql/release フォルダーにある、事前に生成された .sql スクリプト ファイルを指定するだけです。さらに、VSDBCMD を介して SQL プロジェクトのビルド後のイベントで .sql スクリプトを生成します。
これは素晴らしいことですが、ここには大きな問題があり、克服できないようです。これは、データベース データとログ ファイルのパスがデバッグ環境と本番環境で異なることに関係しています。実際には、運用サーバー上の IIS での WebDeploy 中に、c:\programs files...\MyDatabase.mdf ファイルが見つからないという例外が発生します。そして恐ろしいのは、この例外の後、データベース全体が削除されることです。デプロイを行う直前に作成した空のデータベース。私はそれをいじってみました。それについてどう思うかはわかりませんが、これに対する信頼できる解決策を見つけられることを願っています.
展開中にパスを変更する方法を熱心に探していたところ、スキーマ オブジェクト\データベース レベル オブジェクト\ストレージ\ファイルの下にある *.sqlfiles.sql ファイルのパスを変更することについて言及している多くの場所を見つけました。 deploy to は、デバッグ SQL サーバー データベースからのスキーマ比較と書き込みのために指定されたパスです。ここでパスを変更すると、次のスキーマ比較と書き込みを行うまで一時的に機能します。その後、sqlfiles.sql ファイルはデバッグ データベースからの情報で再度上書きされます。また、スキーマの比較中にこれらのファイルを更新しないように注意する必要はありません。間違いがあると、運用データベースが削除される可能性があるからです。
私の救いは Release.sqlcmdvars ファイルにあると思います。実際にはいじめです。デフォルトのデータベースパスを「入力できる」場所を見ることができますが、「デフォルトでデータベースファイルが作成される場所(デプロイ時に設定)」と記載されているため、読み取り専用フィールドに表示されます。ここでパスを指定できれば素晴らしいことです。*.sqlfiles.sql ファイルからのパスをオーバーライドする変数にパスを指定する方法はありますか?
私が働いているソリューションでは、Path1 と Path2 という名前の sqlcmdvars に 2 つのカスタム変数があり、そのようなことを行う予約名だと思いました。ただし、これは私のソリューションでは機能せず、2 つのソリューションの違いは、他のソリューションが TFS ビルド コントローラーを介してデプロイされることです。サードパーティのソース管理サービスを使用しながらお金を節約することを選択したため、TFSビルドコントローラールートを実行することは実際にはオプションではありません.
これに関するどんな助けも素晴らしいでしょう。デバッグ用とリリース用に別々の *.sqlfiles.sql ファイルを作成し、構成に応じてどちらか一方を使用するように dbproj ファイルを構成しましたが、これも機能していないようです。また、FILENAME = '$(PATH1)\Cameleon_log.ldf' のように sqlfile.sql ファイルでカスタム PATH1 変数を使用しても機能しません。そんなに難しくないはずだと本気で思っています。ここで簡単なものが欠けていますか??
ありがとう!