web-dev-qa-db-ja.com

複雑な変更の展開

データベースの変更(新規または変更されたテーブル)および動的ソースコード(PHPやColdFusionなど)を必要とするかなり複雑な変更をWebサイトにデプロイする必要がある場合があります。ライブWebサイト上のすべてを壊すことなく、これらの変更を迅速にパッケージ化して展開する最良の方法は何ですか

4
Justin Scott

簡単な答え:それは首の痛みです!

私はこれを何回かしなければなりませんでした(そして毎回、次のプロジェクトで自分の設計についてもっと考えたいと思うようになります)。私がしていることは、開発に移動する前にすべてのバグを確実に解決できるように、開発セクション(またはフォルダー、サーバーなど)にコードベースをフォークすることです。次に、常に最初の2行が同じであるSQLスクリプトを作成します。

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

これにより、スクリプトがすべてを完全に新しい空のデータベースに格納します。スクリプトの残りの部分は、古いデータベースから新しいデータベースに再利用しているすべてのテーブルを再作成します。次に、新しい(または変更された)テーブルを新しいデータベースに作成します。最後に、すべてのデータをライブサーバーから開発サーバーに移動します。これは、移動するデータの量と移動の速度によっては時間がかかる場合があります。そのため、実行を強制される回数が少ないほど良いので、スクリプトについて慎重に検討することをお勧めします。

新しい開発データベースを立ち上げて実行した後は、それを使用する新しいコードを作成します。ハッシュ化すると、展開は比較的簡単になります(ただし、時間がかかる可能性があります)。同じスクリプトを使用して、すべての新しいライブデータを展開サーバー上の新しいデータベースにコピーし、そこにすべての新しいコードをコピーするだけで完了です。

これは私がそれを行う方法であり、それは苦痛ですが、うまくいきます。もっと良い方法があれば、喜んで聞きます。

更新: Tchalvakのコメントに応じて、はい、通常、実際のデータなしですべてのテーブル定義を取得するために次を使用します。

mysqldump --databases --no-data databaseName > newScript.sql

次に、上記のようにこのスクリプトを変更します。

3
Mike

「ロールバックする能力」を得るには、 git または Mercurial(分散バージョン管理システム) のいずれかを(よく)知ることをお勧めします。

フラットファイルでソースコードを操作する必要はありませんでした(フラットファイルで操作する必要がありますが、それらを追跡する非常に堅牢な変更管理システムが必要です)。

2
Kzqai

私は一般的に(LAMPスタイルのサイト用):

  1. 変更を定義する次に、それらを適用するスクリプトを作成します(Makefileを使用します)。
  2. テスト実際の環境を表すデータのサンプルに対する変更
  3. テストもう一度確認してください
  4. 自分に道を譲る、ロールバックする能力を持っている

クラスターを実行している場合、サイトの状態、キャッシュなどに大きな頭痛の種があるかもしれません。

0
Aiden Bell