joppot

コピペで絶対動く。説明を妥協しない

プログラミング

railsのrakeのmigrationファイルを削除しNO FILEとstatusに出た時の対処

投稿日:


file543f0460e1490

概要

みなさんこんにちはcandleです。今回は誤ってデータベースに反映したマイグレーションファイルを不要だと思って削除した時に、NO FILEと出てきてしまった時の対処です。

言うなれば、下のような状態になった時にどうやってNO FILEの履歴を消すかです。
checknofile


前提

railsの環境が整っている



消したいマイグレーションフィアルのIDを調べる

まずは消したいマイグレーションIDを調べます。
下のコマンドをrailsプロジェクトの中で実行しましょう。

bundle exec rake db:migrate:status

targetid

私の場合、消したいmigration IDは「20141013154137」です。

上の図を見てもらうと分かるように、Statusが NO FILE となっているマイグレーションもupになっていますよね。ということはデータベースはこのマイグレーションファイルの構造を取り入れているということです。

もしかすると、実際は手動でMysqlのカラムを削除したり、あるいわ。カラムを使っていないからマイグレーションファイルを削除したのかもしれませんが。

これをひとまずdown、つまりマイグレーションファイルがデータベースに対して非アクティブにならない限りは話にならないので、そのmigration IDのマイグレーションファイルを作ります。


マイグレーションファイルを作る

rails プロジェクトの db/migrationに移動します。

cd db/migration

そこで先ほど確認したNO FILEのmigration IDのマイグレーションファイルを作ります。
一般に下の様に作ると良いでしょう。

touch マイグレーションID_tmp.rb

私の場合ですと

touch  20141013154137_tmp.rb

touch20141013154137file

次に、作成したファイルをエディタで開きます。私はemacsを使いますが、なんでも良いでしょう。

emacs  20141013154137_tmp.rb

下の内容を書き込みます。


class Tmp < ActiveRecord::Migration
  def change
  end
end

保存しましょう。

ファイルの作成ができました。

マイグレーションファイルを削除する

下のコマンドでもう一度マイグレーションを確認します。

bundle exec rake db:migrate:status

migrationtmpfile

今作成したマイグレーションファイルをupからdown状態にします。

一般に下のコマンドでdown状態にします。

bundle exec rake db:migrate:down VERSION=マイグレーションID

私の場合は

bundle exec rake db:migrate:down VERSION=20141013154137

ですね。

downcommandver

ステータスがdownになっているのを確認して

bundle exec rake db:migrate:status

2014statusdown

downを確認したら、マイグレーションファイルを削除します。

私の場合は

rm db/migrate/20141013154137_tmp.rb

です。

rmdownmigrationfile

statusを確認してみます。

bundle exec rake db:migrate:status

vanishedtmpsection

うまくいきましたね。

まとめ

NO FILEと出る前に、任意のマイグレーションファイルをダウンさせてからrmするようにしましょう。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ruby on railsで出力されるlog(ログ)のフォーマットを変更する

概要 みなさんこんにちはcandleです。今回はrailsのログに関する記事です。railsは決まった記述でログを出力します。 webアプリケーションを実行中におかしな挙動が合った場合はこのログをもと …

Hiragino Sansフォントウェイトのcss書き方まとめ

概要 みなさんこんにちはcandleです。今回はHiragino Sansのcssの書き方を紹介します。 Hiragino Sansの特徴はフォントの太さを1から9段階まで変えられることです。 一方で …

railsのwebrickでi18nの言語切り分けをサブドメインで設定する

概要 みなさんこんにちはcandleです。最近では海外展開も視野に入れたwebアプリケーションの開発が行われることが多くなってきているような気がします。 そうなってくると、webアプリケーションの国際 …

ruby on railsに最強のwysiwygエディタ、Squireを導入する

概要 みなさんこんにちはcandleです。今回はruby on railsにsquire editorを導入したいと思います。 squireはオープンソースの便利なwysiwygエディタです。 カスタ …

wordpressのget_categoriesでサブカテゴリーを含まないカテゴリー一覧を取得する

概要 みなさんこんにちはcandleです。今回はカテゴリー一覧にサブカテゴリーを含まない取得の仕方を紹介します。 サブカテゴリーを使用しているサイトの場合、場合によってはサブカテゴリーとトップの階層の …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー