メモです

メモです

resourcesをnestさせたモデルがHeroku上で期待した動作をしない

問題

resourcesをnestさせたモデルがHeroku上で期待した動作をしない

解決手法

schema.rbに意図していない記述が誤って混入していた。それを除去したところ期待した動作をした。

状況

・GroupとUserという二つのモデルがあり
group.rb 
has_many:users

user.rb
belong_to:group
という関係を持つ。

・heroku上では「https://sample.herokuapp.com/groups」のページはローカルと同じように表示されるが、「https://sample.herokuapp.com/groups/1/users 」のページは表示されず、
「We're sorry, but something went wrong. If you are the application owner check the logs for more information.」
が表示されてしまう。このときheroku log には
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "users" does not exist」
と表示される

やっても解決しなかったこと
・heroku rake db:reset

以下が表示された
ActiveRecord::NoEnvironmentInSchemaError:
Environment data not found in the schema. To resolve this issue, run:
bin/rails db:environment:set RAILS_ENV=production」

・heroku rake db:migrate RAILS_ENV=production

特に変わりなし

・heroku pg:psqlを実行し、select * from users;

以下が表示された
「relation "users" does not exist」

・bin/rails db:environment;set RAILS_ENV=production

特に変わりなし

・herokuでアプリを一度削除。もう一度やり直す

特に変わりなし

・「heroku rake db:schema:load RAILS_ENV=production」

コマンドラインを見ると
groupsテーブルの作成は成功しているが、usersテーブルを作成しようとすると
「rake aborted! NameError:: uninitialized constant」が表示される。

usersのテーブルだけが作成できないということがusersモデルを定義するファイルがおかしいのではと考える。
結果的にschema.rbのuserモデル定義部分に全く意図していない記述が混入していた。それを除去した後に、通常通りdeployすると期待通りの表示がされた。

感想
・本来は設定等に起因しない単なるミスタイプが原因のエラーは知見としての有用性は低いので投稿すべきではないとは思うが、何らかの設定ミスだと思い込み初歩的なミスを犯していたことは自分のために記録に残すべきと考えて投稿した。

教訓
・エラー内容で検索しても全く引っかからないときは初歩的なミスタイプの可能性がある
・エラーログを丹念に追うことはやはり重要である
・ロジカルにエラー原因を考える。闇雲にコマンドを連発しない。今回はgroupテーブルだけが作成できているということにもっと注意を向けるべきだった。