fc2ブログ

2023.09 «  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - - » 2023.11
TOP > CATEGORY > migrationでダウングレード

TOP

migrationでダウングレード02【悲劇と立ち直り方】 

2007年07月05日 ()
migrateファイルの中身の途中にSQLのシンタックスエラーがある場合、悲劇が起こることがあります。

例えば、005_nantoka_kantokas.rb というmigrateファイルがあったとして、その中身が途中で間違っていたとします。

class CreateNantokaKantokas < ActiveRecord::Migration
  def self.up
    create_table :nantoka_kantokas do |t|
      t.column :my_number, :integer
    end
   
    execute "alter table nantoka_kantokas add constrainttttttttttttttttt fk_nantoka_kantokas_books
              foreign key (my_number) references books(id)"
  end

  def self.down
    drop_table :nantoka_kantokas
  end
end



そいでもって、

# rake db:migrate



を実行すると

rake aborted!
Mysql::Error: #42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax



などというエラーがでます。あっ、005_nantoka_kantokas.rb ファイル中の constrainttttttttttttttttt という箇所が間違ってる、と思ってそれを constraint に直して、

# rake db:migrate



を再び実行すると、うまく行くと思いきや、

rake aborted!
Mysql::Error: #42S01Table 'nantoka_kantokas' already exists



と表示されているので、あちゃー、これは、まず、nantoka_kantokas テーブルを消さなきゃ、と思いました。

そこで、バージョンをひとつ前に戻そうとして、

# rake db:migrate VERSION=4



を実行しても、005_nantoka_kantokas.rb ファイルの中の drop_table :nantoka_kantokas は、実行されません。

なぜなら、一番最初に打った、rake db:migrate コマンドは、create_table :nantoka_kantokas まで中途半端に実行されています。

でも、rake db:migrate コマンドは、結局成功しなくて alter table nantoka_kantokas の前で止まってしまいました。

そして、DB の schema_info テーブルの version カラムの値は、5 に上がらず 4 のままだったからです。

なので、一回自分で self.down の分を実行しなければなりません。 mysql プロンプトからテーブルをドロップします。

$mysql drop table nantoka_kantokas



そして、005_nantoka_kantokas.rb ファイルの constrainttttttttttttttttt という部分が constraint に修正されていることを確認して、migrateします。

# rake db:migrate



良かった。動きました。これで今夜は羊を数えずとも眠りに入っていけます。

【広告】

スポンサーサイト



[2007.07.05(Thu) 01:13] migrationでダウングレードTrackback(0) | Comments(0) 見る▼
↑TOPへ

migrationでダウングレード01【基礎】 

2007年07月05日 ()

# rake db:migrate VERSION=4



001_honyarara_ponpokopi.rb
から
004_chomechome_boyoyon.rb
までを実行したバージョンまで戻してくれる。

この場合、DBのschema_infoテーブルのversionカラムの値は、4になる。

というのが基本です。


ところがシェークスピア並の(というのはJAROモノの超おおげさ)悲劇が発生。それは次回に。


【広告】

[2007.07.05(Thu) 01:11] migrationでダウングレードTrackback(0) | Comments(0) 見る▼
↑TOPへ

TOP