joppot

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

プログラミング

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

投稿日:

Pocket

file543f0460e1490

概要

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

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


前提

railsの環境が整っている

SPONSORED LINK


消したいマイグレーションフィアルの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のデータベースのテーブルにカラムを追加、削除する

概要 みなさんこんにちはcandleです。今回はrailsのカラムの追加の仕方を紹介します。 本当にrailsは規約が多くて、多くて、なんでデータベースを直接いじれないんだと。 早速やっていきましょう …

Rails pluginを使ったgemの作り方[1](基本設定編)

概要 みなさんこんにちはcandleです。今回からできればシリーズ物として、railsのgemを作っていこうと考えています。なぜかgemの作り方の詳しい解説サイトが日本語で少ないので未だgemを満足に …

【TwitterBootstrap2.3.2】cssによるレスポンシブwebデザインのメディアサイズの範囲分け

概要 みなさんこんにちはcandleです。今回は当たり前の内容ですが、twitterbootstrap2.3.2(以下bootstrap)のmediaサイズがどの様に分けられているのか見てみましょう。 …

C++のopencvでhelloworld

概要 みなさんこんにちはcandleです。インストールできたopencvを使ってhelloworldを行いましょう。 opencvでhelloworldとはなんぞや、と感じるかもしれませんが、open …

Rails pluginを使ったgemの作り方[2](rails組み込み編)

概要 みなさんこんにちはcandleです。前回に引き続き、gemの作成をやっていきましょう。 今回はgemを作成したら、それをrailsプロジェクト上で読み込み、動作テストをするところをやります。 前 …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ