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

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

関連記事

wordpressのbogoでサイトで使用する言語を「en-US」から「en」に変更する方法

English 日本語 概要 みなさんこんにちはcandleです。 今回はbogoプラグインのカスタマイズです。bogoはwordpressのサイトを簡単に他言語に対応することができる素晴らしいプラグ …

scikit-learnの4つの関数で機械学習などのデータを前処理する

概要 皆んさんこんにちはcandleです。今回はpythonの機械学習ライブラリ『scikit-learn』を使い、データの前処理をしてみます。 scikit-learnでは変換器と呼ばれるものを使い …

phpmyadminでmysqlデータベースの照合順序を変更する

概要 みなさんこんにちはcandleです。 ちょっとした事なのですが、意外に分からなかったのでまとめました。 phpmyadminを使ってデータベースを作ると、うっかり、utf8_general_ci …

railsの多対多リレーションでcounter culture を使用する

概要 みなさんこんにちはcandleです。 今回は多対多のリレーションが貼られているrailsアプリケーションで、counter cultureを使ってレコード数を数えてみたいと思います。 以下のよう …

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

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

  • English
  • 日本語

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