移行についてもう少し。 PHPバージョン

RailsGuidesの対応する記事の紹介を自由に引用して、

移行は、データベーススキーマの構造と変更を管理する便利な方法です。
もちろん、さまざまなSQLファイルを使用して、昔ながらの方法でビジネスを行うことができます。または、実際のデータベーススキーマである1つの大きなファイルでSQLコードを編集することもできます。



ただし、これらの変更を監視するには、ある時点から、生産マシンでの対応する変更の適用は言うまでもなく非常に困難になります。ここでは、チーターの器用さ、熊の強さ、すべての東の賢者の知恵を集めて、すべてを正しく行う必要があります落とさないでください。

しかし、上記の品質のいずれも所有していない場合はどうなりますか? そうです、プロセスを体系化して自動化し、ほとんどの作業を機械に移す必要があります。



すでに興味がある、またはまだわからないが、変更の透過的な履歴があり、1つまたは2つのコンソールコマンドを使用してスキームの任意のバージョンにロールバックできるという見込みがある場合は、魅力的だと思われます。



Ruby on Railsの使用を開始すると、すぐに移行メカニズムに精通し、しばらくすると、この信じられないほど便利なツールがなければどうすればよいか理解できなくなります。

PHPで開発されているプロジェクトに来て、Ruby on Railsでの経験からおなじみの、少なくとも最小限の便利なツールセットを導入しようとしました。 ポイントの1つは、移行をサポートするシステムでした。

いくつかの検索の後、 Ruckusing Migrationsを選択しました。これは、私がRailsで見たものと最も類似しています。 6か月以上たった後、フライトは正常になったと報告しています。



設置



Composerを使用して依存関係を管理していることを前提としています。 そうでない場合は、試してみてください、それは価値があります!

また、必要に応じて、GitHubでリポジトリのクローンを作成できます(例: github.com/ArtemPyanykh/php_migrations_example)。


開始するには、composer.jsonに追加します。

"require" : { "ruckusing/ruckusing-migrations": "dev-master" }
      
      





そして実行する

 ~/dev/php_migrations_example(master)$ php composer.phar install
      
      





ComposerはRuckusing Migrationsをプルアップし、vendorsディレクトリをインストールします。



さらに、次のことを行うことをお勧めします。





それだけです。これ以上の設定は必要ありません。移行システムを正常に統合しました!



使用する



一般的に、すべてが非常に簡単です。 移行を生成することから始めましょう:

 ~/dev/php_migrations_example(master)$ cd db ~/dev/php_migrations_example/db(master)$ ./ruckus db:generate CreateTestTable Created migration: 20130508145210_CreateTestTable.php
      
      





この後、db / migrations / mainディレクトリに、同じ名前(タイムスタンプが異なる)のファイルが次の内容で追加されます。

 <?php class CreateTestTable extends Ruckusing_Migration_Base { public function up() { }//up() public function down() { }//down() }
      
      





移行には、適用できるだけでなく、変更をロールバックする適切な方法がある場合にキャンセルできるという特性があります。 これは、まさにup()メソッド(変更を適用する)とdown()メソッド(変更をロールバックする)のセマンティクスです。 いくつかのフィールドとインデックスのペアを持つテストテーブルを作成しましょう。 次のようにファイルを補足します。

 <?php class CreateTestTable extends Ruckusing_Migration_Base { public function up() { $table = $this->create_table('test', array('options' => 'ENGINE=InnoDB DEFAULT CHARSET=utf8')); $table->column('this', 'integer', array('unsigned' => true, 'null' => false, 'default' => '42')); $table->column('that', 'string', array('limit' => '7')); $table->column('those', 'datetime'); $table->finish(); $this->add_index('test', array('this', 'that'), array('unique' => true)); }//up() public function down() { $this->drop_table('test'); }//down() }
      
      





移行を実行します。

 ~/dev/php_migrations_example/db(master)$ ./ruckus db:migrate Started: 2013-05-08 7:05pm MSK [db:migrate]: Schema version table does not exist. Auto-creating. Creating schema version table: schema_migrations Migrating UP: ========= CreateTestTable ======== (0.31) Finished: 2013-05-08 7:05pm MSK
      
      





上記の仕様に完全に準拠したテストテーブルの作成に加えて、schema_migrationsテーブルも作成されていることに気付くでしょう。 これは正常です-これは、Ruckusing Migrationsが適用された移行と適用されなかった移行に関する情報を保存する場所です。



別の環境の移行を単にロールバックまたは開始することもできます。

 ~/dev/php_migrations_example/db(master)$ ./ruckus db:migrate VERSION=-1 Started: 2013-05-08 7:13pm MSK [db:migrate]: Migrating DOWN: ========= CreateTestTable ======== (0.21) Finished: 2013-05-08 7:13pm MSK ~/dev/php_migrations_example/db(master)$ ./ruckus db:migrate ENV=test Started: 2013-05-08 7:14pm MSK [db:migrate]: Schema version table does not exist. Auto-creating. Creating schema version table: schema_migrations Migrating UP: ========= CreateTestTable ======== (0.24) Finished: 2013-05-08 7:14pm MSK
      
      





これは、システムの機能の小さなデモです。 ただし、正しい移行メカニズムを使用してデータベースをバージョン管理することがどれほど簡単で便利であるかが明らかになったと思います。



備考



  1. db/



    ディレクトリからではなくruckus



    スクリプトを実行しようとすると、エラーが発生します。 これは、スクリプト内のすべてのパスが相対パスであり、必要に応じて簡単に修正できるためです。 ただし、1つ考慮する必要があります。デフォルトでは、作業ディレクトリで構成が検索されます。

  2. 本番環境に移行を適用する場合は、非常に注意する必要があります。かなり重いテーブル(数ギガバイトなど)があり、移行を適用してスキームを何らかの形で変更すると、ほとんどの場合災害になります。 これは、マイグレーション自体の不足ではなく、DBMSの不足ではないかもしれませんが、それでもシステムを使用する可能性をいくらか制限します。 大きなテーブルを更新するには、 Percona Toolkitなどの専用ツールを使用する必要があります





参照資料






All Articles