質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

マイグレーションをかけてもデータベースのカラムのカラム名が変わらない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,933

kuzuno_ryou

score 9

前提

bcryptを入れてパスワードをハッシュ化しようとしています。
ユーザーの新規登録ボタンを押した時に問題が起きます
ローカルでエラーは起きません。
本番環境で下記のエラーが起きます。
マイグレーションをかけてもデータベースのカラムのカラム名が変わらないのは何故なのでしょうか?
またこのようにマイグレーションがデータベースに反映されない場合はどこを見るのが良いでしょうか

$ heroku run rake db:migrate
Running rake db:migrate on ⬢ firstkuzuno... up, run.8424 (Free)
D, [2019-02-16T15:51:12.223673 #4] DEBUG -- :    (0.8ms)  SELECT pg_try_advisory_lock(7556455125640126755)
D, [2019-02-16T15:51:12.250999 #4] DEBUG -- :    (2.1ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
D, [2019-02-16T15:51:12.273476 #4] DEBUG -- :   ActiveRecord::InternalMetadata Load (1.0ms)  SELECT  "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2  [["key", "environment"], ["LIMIT", 1]]
D, [2019-02-16T15:51:12.297343 #4] DEBUG -- :    (2.0ms)  BEGIN
D, [2019-02-16T15:51:12.302973 #4] DEBUG -- :    (4.1ms)  COMMIT
D, [2019-02-16T15:51:12.307083 #4] DEBUG -- :    (3.7ms)  SELECT pg_advisory_unlock(7556455125640126755)

発生している問題・エラーメッセージ

mysqlのデータベースではカラム名が「password_digest」

PostgreSQLのデータベースでは「password」

その状態で新規登録のアクション実行で(ボタンを押した時)

NoMethodError (undefined method `password_digest='

とエラーが出ます

ローカルと本番環境でパスワードのカラム名が違うのが原因だと思うのですが

heroku run rails db:migrate

は実行してあります

最低限の情報を入れたつもりですが足りない場合は指摘をお願いします

「追記」他に怪しいと思っている部分

app/controllers/users_controller.rb:17:in `create'
ログの最後がここで500が帰ってきます

user = User.new(user_params)


17行目は上の1行でおそらくuser_paramsで受け取るものが悪いと思います。(ローカルでは成功しているため)

  def user_params
    params.require(:user).permit(:nicename, :mail, :password, :password_digest)
  end


bcryptを導入するときに見た記事と同じ書き方なので問題がないと思います。というよりもローカルでは成功しているので、やはりデータベースだと思われますが。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

gitにpushし忘れているということはありませんか?
もしくは、一度migrateしたマイグレーションファイルを上書きして変更しようとしていませんか?

rake db:migrate:statusでmigrateの状況が確認できるので、
ローカル環境と本番環境で見比べてみるとなにか分かるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/17 12:06

    ローカル
    ```
    database: LibraryApp_development

    Status Migration ID Migration Name
    --------------------------------------------------
    up 20181208023448 Create books
    up 20181208023617 Create users
    up 20181208023718 Create impressions
    up 20181208023820 Create comments
    up 20181208023921 Create likes
    up 20181208024653 Create active storage tablesactive storage
    ```

    heroku run
    ```
    database: df61vv59or6mve

    Status Migration ID Migration Name
    --------------------------------------------------
    D, [2019-02-17T02:26:26.899850 #4] DEBUG -- : (1.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
    up 20181208023448 Create books
    up 20181208023617 Create users
    up 20181208023718 Create impressions
    up 20181208023820 Create comments
    up 20181208023921 Create likes
    up 20181208024653 Create active storage tablesactive storage
    up 20181231091444 ********** NO FILE **********
    ```
    ローカルと本番環境では違いはないと思われます。

    自分はdatabase.ymlのproduction環境で参照しているdatabaseが「df61vv59or6mve」ではなく「LibraryApp_production」となっていたのが原因と思いましたが変更してheroku push をしてもエラーは変わりませんでした。

    自分では今ここでどうすれば良いかわかりません。

    そこで、初めの回答の
    >もしくは、一度migrateしたマイグレーションファイルを上書きして変更しようとしていませんか?

    ということですが、マイグレーションできていないのかと定期的に何度も
    ```
    heroku run rails db:migrate
    ```
    コマンドを打っています

    キャンセル

  • 2019/02/17 12:36

    > up 20181231091444 ********** NO FILE **********
    production環境にだけmigrateされて、ファイルが消されたものがありますね。。
    - ローカルでmigrateせずにproductionにmigrateしたあと、migrationファイルを消した
    - productionにmigrateしたあと、ローカルだけrollbackしてファイルを消した
    のどちらかだと思います。
    どんな変更かは分かりませんが、ローカルとproductionでDBに差分が出ているはずです。
    質問の内容とは別件ですが問題です。

    rails db:migrate:statusの結果ですが、全てCreateになっていますね。
    やはりmigrate済のファイルを編集して再度migrateしようとしていませんか?
    もしそうであれば、migrationファイルの扱い方が根本的に間違っています。
    一度migrateしたファイルは基本的に変更せず、DBの内容を変更したいときは変更用のmigrationファイルを新たに作ります。
    初歩的な部分なのでちゃんと勉強しましょう。
    https://railsguides.jp/active_record_migrations.html

    キャンセル

  • 2019/02/17 14:33

    ありがとうございます!
    うまくいきました!
    ローカルでは適宜コマンドを打っていましたが、追加したカラムがエラーの原因になった時に反映をローカルでしかしていなかったようです。本番環境で
    ```
    heroku pg:reset DATABASE_URL
    ```
    としてもう一度マイグレーションをかけると本番環境とローカルで同じようになりました。
    ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る