12

データ アクセス コードを生成するために CodeSmith を必要とする古い ORM である .NetTiers を使用する既存のプロジェクトで動作する移行フレームワークを探しています。

ラウンドハウスの経験があり、使用に成功しています。また、Octopus Deploy からデプロイを実行するときに、スキーマの変更を自動的にデプロイすることもできます。これは単なる SQL スクリプトの集まりであるため、かなり簡単です。

FluentMigrator への移行に関心があります。私は FM DSL が好きで、この SO の質問は非常に便利であることがわかりましたが、理解できないことがいくつかあります。

  1. 既存のデータベース スキーマ [*] をインポートする正しい方法は何ですか?
  2. 本番環境に移行を展開する正しい方法は何ですか [**]?

[*] SQL Server ツールを使用して単一のスクリプトを生成し、最初の移行として ExecuteEmbeddedSql を使用すると仮定しています。あれは正しいですか?

[**] 移行を実行するには、主に 3 つの方法があるようです (コマンド ライン、NAnt ランナー、MSBuild ランナー)。実行するには、データベースにアクセスする必要があります。これを PROD 環境にデプロイするとします。開発者とビルド サーバーは、この環境にアクセスできません。これらのランナーをその環境に対してどのように実行しますか?

通常のデプロイ プロセスでは、デプロイの一部としてデプロイする必要がある SQL スクリプトのコレクションを作成します。Ops はこれらを展開の一部として実行します。Octopus Deploy プロセス (powershell) の一部として自動的に実行されるか、展開が Octopus の外部にある場合は手動で実行されます)。

この特定のプロジェクトで発生する複雑な問題の 1 つは、.NetTiers です。これは、.NetTiers を使用して CodeSmith コード生成を実行し、データ アクセス層を構築してから、それらのエンティティとデータ サービスに対してコードを作成する必要があることを意味します。したがって、ワークフローは次のようになります。

  1. 書き込み移行
  2. 移行を実行してデータベースをアップグレードします (特定の .NetTiers データベースをターゲットにします)。
  3. 特定の .NetTiers データベース (中央ビルド サーバー) に対して .NetTiers を実行します。
  4. 新しく生成された .NetTiers エンティティ、データベース フィールドなどに対するコード

.NetTiers をダンプしたいのですが、残念ながらリファクタリングは現在実行可能なオプションではありません。

4

1 に答える 1

18

私はついにこれを解決しました。私の問題のほとんどは、FluentMigrator に関する理解の欠如に関係していました。元の質問を 1 つずつ選択します。

既存のデータベース スキーマをインポートする正しい方法は何ですか?

「正しい方法」を見つけることができませんでしたが、自分に合った方法を見つけることができました! 私は次の主要な決定を下しました。

  1. データベース全体をベースラインとしてスクリプト化しました。すべてのテーブル、プロシージャ、制約、ビュー、インデックスなどを含めました。最初の反復をそのベースラインとしてセットアップしました。DROP なしで CREATE オプションを選択しました。これが私の移行になります。
  2. 同じスクリプト ダンプを実行しましたが、DROP のみを選択しました。これは私の移行ダウンになります。

ベースラインの移行では、EmbeddedScriptメソッドを使用して添付のスクリプトを実行するだけです (スクリプトも繰り返しフォルダーに整理します)。

[Tags(Environments.DEV, Environments.TIERS, Environments.CI, Environments.TEST)]
[Migration(201403061552)]
public class Baseline : Migration
{
    public override void Up()
    {
        this.Execute.EmbeddedScript("BaselineUp.sql");
    }

    public override void Down()
    {
        this.Execute.EmbeddedScript("BaselineDown.sql");
    }
}

ベースラインが解決されました...

.NetTiers の扱い方

わかりました、これはやや挑戦でした。.NetTiers コード生成を実行するために使用する特定の .NetTiers データベースを作成しました。FluentMigrator では、移行に「タグを付ける」ことができます。環境に基づいてタグ付けすることにしました。したがって、「tiers」タグと「dev」、「test」、「uat」、「prod」などのタグがあります。これらの実行方法については後で説明します。

スキーマを変更するときは、移行を作成し、「層」タグを使用して .NetTiers スキーマの変更に焦点を当てます。次に、その特定のタグをフラグとして使用して、Visual Studio 外部ツールからmigrate.exeを実行します。マシン名に一致する app.config データベース接続が使用されるデータベース接続になるため、これを tiers データベースに向けます。これで、移行が実行され、.NetTiers ソース データベースの準備が整いました。これで、.NetTiers Codesmith コード生成ツールを実行して、新しい DLL を生成できるようになりました。

.NetTiers は解決しました...

本番環境に移行を展開する正しい方法は何ですか?

私は Octopus Deploy を使用していますが、正直に言うと、.NET アプリケーションを特に複数のサーバーにデプロイする場合、これは絶対に頼りになるツールです。

Octopus Deploy の詳細には触れませんが、基本的なレベルでは、TeamCity と Octopus deploy を一緒にフックできます。OD では、次の 2 つのアイテムを提供しています。

  1. アプリケーションを NuGet パッケージとしてラップする Octopack というプログラム。
  2. TeamCity に NuGet パッケージをビルドさせ、それを NuGet フィードで公開されるアーティファクトとして提供する TeamCity プラグイン。

その後、Octopus Deploy はその NuGet フィードを使用して、それらのパッケージをエンドポイント サーバーにデプロイできます。このデプロイ プロセスの一部として、PreDeploy および PostDeploy Powershell スクリプトが実行されます。ここで、特定のタグを使用して migrate.exe アプリケーションを実行します。

展開は解決しました...

于 2014-08-18T09:49:24.497 に答える