テストデータベースの移行に関する問題

@Mittineague さん、ありがとうございます!

しばらくして、それが理にかなっていることに気づきました。仕様書(spec)も作成しましたが、仕様書を追加する前(そしてコードを追加する前に戻した状態)でも、以下の理由で spec が失敗します:

An error occurred while loading ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb.
Failure/Error: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERROR:  relation "groups" does not exist
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass
                              ^
# (eval):24:in `async_exec'
# (eval):24:in `async_exec'
# ./app/models/group.rb:529:in `lookup_group'
# ./app/models/group.rb:513:in `block in ensure_automatic_groups!'
# ./app/models/group.rb:512:in `each_key'
# ./app/models/group.rb:512:in `ensure_automatic_groups!'
# (eval):3:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `require'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `<top (required)>'
# ------------------
# --- Caused by: ---
# PG::UndefinedTable:
#   ERROR:  relation "groups" does not exist
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   (eval):24:in `async_exec'
No examples found.

これはサイトのほぼすべての spec で発生しているようです。正常に動作する状態に戻すために git reset --hard upstream/master を正しく実行し、データベースを削除して再作成したはずですが、まだこのエラーが発生します。

エラーメッセージを読むのが得意ではないと認めます。参照されていると思われるファイルを確認しましたが、「group(s)」という行は見当たりませんでした。

これがご自身のコードの場合、私が時々苦労する点かもしれません。つまり、「複数形は2つ以上を意味する場合」と「慣習として複数形を使う場合」の区別です。

つまり、構文上は「group」の「s」なしを求めているのに、あなたは「groups」と考えている可能性があります。

同様に、コードによっては大文字小文字が厳密に求められることもあります。例えば「Group」と「group」の違いです。

知っていると言いたいところですが、残念ながら分かりません。より詳しい方がコメントされない限り、「猿真似」でコーディングすることをお勧めします。

グループについては何も操作していません(私のプラグインにはグループが表示されません)。また、その仕様は Discourse 全体で失敗しています。念のため、マスターをもう一度クローンして、私のフォークに何か問題がないか確認します。再度ありがとうございます!

テストデータベースのマイグレーションが必要のようです

RAILS_ENV=test bin/rake db:migrate

これで解決しない場合は、削除して最初からやり直してください

RAILS_ENV=test bin/rake db:drop
RAILS_ENV=test bin/rake db:create
RAILS_ENV=test bin/rake db:migrate

RAILS_ENV=test を指定することを必ず確認してください。そうしないと、開発用データベースを誤って削除してしまいます(今週、私もうっかりやってしまいました :man_facepalming:)

もしかしたら、それが私の問題かもしれません!テストではなく開発環境を誤って削除してしまったのかもしれません。ありがとうございます。あ、空港に向かう前に、ラップトップに新しい開発環境をインストールする必要がありますね。

スペックスイートの冒頭で未適用のマイグレーションをチェックする処理を追加しました。これにより、今後同様の問題を特定しやすくなります。

ありがとう、David!警告が表示されるようになったのを見ました。テストデータベースのマイグレーションがなぜそんなに難しかったのかはよくわかりませんが、あなたが推奨したRAILS_ENV=test bin/rake db:migrateを実行する前に、destroy、create、migrateを何度か繰り返したところ、私のspecが壊れていることに気づきました!これで修正できるので、specの書き方を学ぶ旅に出られます!再び後押ししてくれてありがとう、@Mittineague

私のコミットの背景には、以下のバグが見つかったという事情があります。

RAILS_ENV=test rake db:drop db:create db:migrate

このコマンドでは post_deploy マイグレーションが含まれていません。db:migrate を単独で実行する必要があります。

これは必ず修正しますが、それまでの間、この警告によってフラストレーションを軽減できるはずです!

それは修正されましたか?./bin/rake db:drop db:create はテストデータベースを削除して作成しているようですが、./bin/rake db:migrate はテスト環境でもマイグレーションを実行していないように見えます。