メモです

メモです

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テーブルだけが作成できているということにもっと注意を向けるべきだった。