4

私はRailsが初めてで、べき等かどうかを理解しようとしていrake db:createますrake db:migrate

つまり、DB (postgres または mysql) に対してこれら 2 つのコマンドを問題なく繰り返し実行できますか?

Rails のデプロイを自動化し、Rails アプリがデプロイされるたびにこれらのコマンドを実行するという考え方です。どういうわけかデータベースを邪魔しないようにしたいと思います。

rake db 移行の冪等性に関するその他の落とし穴は非常に高く評価されています。

4

1 に答える 1

10

はい、それらは冪等であり、これらの 2 つのコマンドを実行すると、DB が「最新」になるだけであり、完了するまで実行すると、その後再度実行しても何も起こりません。

ただし、真新しいマシンをセットアップするより良い方法は、

rake db:setup

db:setupこれらのタスクを順番に実行するだけです:

db:create
db:schema:load
db:seed

Noticedb:setupは実行されずdb:migrate、単に実行されdb:schema:loadます。移行は、既存の DB を新しいバージョンにアップグレードする場合にのみ必要です。これは、スキーマの 2 つのバージョン間の違いが記述されているためです。しかし、新しい DB を完全にセットアップしている場合は、移行の履歴全体をスキップして、スキーマの最新の状態にジャンプできます。つまり、現在のスキーマを .xml でロードしますdb:schema:load。アプリケーションに関連する場合は、初期データを作成するためにファイルをdb:seed実行します。db/seeds.rb

実行rake -Tしてすべての Rails Rake タスクを詳細に記述するか、ActiveRecorddatabases.rakeソース ファイルを表示してコードを直接読み取ります。

于 2013-07-23T17:06:27.320 に答える