2011-12-26 15 views
0

rake db:migraterake db:rollbackで予期しない動作が発生しています。誰かが私のために光を放つことができると思っています。"rake db:migrate"と "rake db:rollback"が一度に複数の移行をロールバックしないのはなぜですか?

私は矛盾するものを追加して私のマイグレーションを混乱させました。私は再びマイグレーションしてすべてがうまくいくことを知り続けるために0にマイグレーションしようとしています。

私はrake db:migrate version=0を実行していましたが、移行は報告されず、データベースに影響を与えずにコマンドラインでダンプされました。私はRakefileを持っていて、database.ymlファイルは正しいログイン資格でセットアップされています。

遊んでいるうちに、rake db:rollback step=1に問題なく行くことができました。移行ごとに適切なアクションが実行されます。ただし、rake db:rollback step=2(またはステップ= 3またはステップ5 = 1以外のもの)は、一度に1つの移行のみを実行します。

データベースを完全に削除するために、端末にmysqlを使用しました。それを再作成し、rake db:migrateに行った。彼らが持つべきすべてのテーブルが構築されました。私は何が壊れていたかは固定されていると仮定した

私はrake db:migrate version=0に行きました....そして再び何も起こりませんでした。テーブルはデータベース内にまだ存在していて、空になるはずです。

誰にもアイデアはありますか?ここで私の頭皮に穴を傷つけました。 rake db:migrate version=0 --dry-run --traceは私に応答を与える手動でデータベースをドロップすると、私のマイグレーションを実行した後

、この時点で

** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute (dry run) environment 
** Execute (dry run) db:migrate 

私の移行は、私がしてきた何である、すべてのRailsTutorial.orgのものだけ複製されています今まで学習活動として取り組んでいます。彼らはすべてself.downメソッドを持っているし、私は一度に1つずつ戻ってくるときにそれらはすべて動作します。

他に関連するかもしれないことは、別のコンピュータ(自分のPC)でチュートリアルを完了したことだけです。チュートリアルを自分の仕事の出発点として使うために、私はそれをgithubにプッシュし、Macにクローンしました。 Mac上で初めてRails環境(RVM)を設定するためのチュートリアルを多数行ってきましたが、Mac上のブラウザでもアプリケーションは正常に動作しています(PC上と同じです)。そうするために別の宝石をインストールしました。おそらく私の問題はここから生まれるだろうか?

アドバイスありがとうございます!

答えて

4

こちらはarticleです。

基本的には、db:rollbackのタスクを微調整できます。

rake db:rollback STEP=3 
+0

さて、どのようにそのことについて:

namespace :db do desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n' task :rollback => :environment do step = ENV['STEP'] ? ENV['STEP'].to_i : 1 version = ActiveRecord::Migrator.current_version - step ActiveRecord::Migrator.migrate('db/migrate/', version) end end 

だから今、あなたはこれを行うことができます。解決済み。完全に素晴らしい - ありがとう、セルゲイ!! – Reb

+0

私は方法を試してみようとしています!これは私の最初の投稿です! ;) – Reb

+2

Psst、元の回答が微調整され、重点が全く同じではないので、これを参照する人にはこの機能を有効にしておくだけです:大文字を使用しない(STEPとVERSIONの場合) 。もう一度乾杯! :) – Reb

関連する問題