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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

5488閲覧

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

kuzuno_ryou

総合スコア9

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/02/16 17:10

編集2019/02/16 17:19

前提

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

投稿2019/02/16 21:18

Kta-M

総合スコア456

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuzuno_ryou

2019/02/17 02:13

回答ありがとうございます。 ローカルでは自分の思い通りのデータベースが作れていました。しかし rails db:migrate:status RAILS_ENV=production では ActiveRecord::NoDatabaseError と、データーベースが見つからない状態です。一応結果すべてを貼ってみます。 ``` firstkuzuno::DATABASE=> \d users Table "public.users" Column | Type | Collation | Nullable | Default ------------+-----------------------------+-----------+----------+----------------------------------- id | bigint | | not null | nextval('users_id_seq'::regclass) nicename | character varying | | | password | character varying | | | mail | character varying | | | created_at | timestamp without time zone | | not null | updated_at | timestamp without time zone | | not null | Indexes: "users_pkey" PRIMARY KEY, btree (id) ``` この質問を行うときに本番環境のデータベースの中身を確認しています。なのでデータベースは問題ないと思っていましたが、 ``` firstkuzuno::DATABASE=> \d users ``` これはどうやらfirstkuzunoというフォルダの中にあるpgのデータベースを見ているように見えます。 自分はLibraryAppというフォルダで作業していましたのでおかしいなと思います。 そもそもfirstkuzunoというフォルダはありません。 今自分は、問題は違うフォルダに作ったデータベースを見ているから、今の場所に作り直せば成功するのでは?と思っています。 しかし「LibraryApp」の一つ上は「firstApp」というフォルダなので、もしかしたら何らかの仕様で「firstkuzuno」という名前になっているのかなとも思います。 原因はpgが作業フォルダに作られていないことでしょうか?どうでしょうか? ちなみにですが、これらの作業中、階層を変えることはしていません。質問内容に必要な情報がなければ教えてください。
Kta-M

2019/02/17 02:20

rails db:migrate:status RAILS_ENV=production ↑このコマンドですが、もしかしてローカル環境で実行していませんか? もしそうであれば、ローカルにあるproduction環境用のDBを見に行っている状態です。もちろんそんなDBは存在しないと思います。 herokuでrailsを動かしたことはないですが、おそらく heroku run rails db:migrate:status で見れるはずです。
kuzuno_ryou

2019/02/17 02:27

ローカルで実行していました。 ご指摘ありがとうございます! 早速見てみます
kuzuno_ryou

2019/02/17 03: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 ``` コマンドを打っています
Kta-M

2019/02/17 03: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
kuzuno_ryou

2019/02/17 05:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問