Automatische Migration des Testdatenbank-Schemas

Verwandt: Db:drop, create & migrate behavior with RAILS_ENV=development - #2 by taylorthurlow - A May Of WTFs - Ruby on Rails Discussions

Ich bin mir nicht sicher, ob wir das bereits untersucht haben, aber Rails kann das Test-Datenbankschema automatisch mit ActiveRecord::Migration.maintain_test_schema! verwalten (Methodendefinition, in rails/test_help, im neuesten rspec/rails-Helfer-Generator).

Hier ist ein Diff, um dies in Discourses spec/rails_helper zu integrieren:

Allerdings schlägt dies in meiner Docker-basierten Entwicklungsumgebung fehl:

ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_test

Der Grund dafür ist, dass maintain_test_schema! db:test:prepare verwendet und versucht, die Testdatenbank zuerst zu löschen, auf die (wie ich vermute) der discourse-Benutzer in einer Docker-basierten Umgebung keinen Zugriff hat.

Könnte jemand mit einer nativen Entwicklungsumgebung dies ausprobieren? Wenn es funktioniert, wäre die Änderung vielleicht eine Überlegung wert?

8 „Gefällt mir“

Ich habe diesen Diff angewendet, meine Datenbanken gelöscht und dann ausgeführt:
bin/rails db:create
bin/rails db:migrate

Anschließend habe ich eine zufällige Spez ausgewählt:

▶ bundle exec rspec spec/requests/permalinks_controller_spec.rb 
Ein Fehler ist beim Laden von ./spec/requests/permalinks_controller_spec.rb aufgetreten.
Failure/Error: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERROR: relation "groups" existiert nicht
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass
                              ^
# ./app/models/group.rb:532:in `lookup_group'
# ./app/models/group.rb:516:in `block in ensure_automatic_groups!'
# ./app/models/group.rb:515:in `each_key'
# ./app/models/group.rb:515:in `ensure_automatic_groups!'
# (eval):3:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./spec/requests/permalinks_controller_spec.rb:3:in `require'
# ./spec/requests/permalinks_controller_spec.rb:3:in `<top (required)>'
# ------------------
# --- Verursacht durch: ---
# PG::UndefinedTable:
#   ERROR: relation "groups" existiert nicht
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   ./app/models/group.rb:532:in `lookup_group'
Keine Beispiele gefunden.


Abgeschlossen in 0,00003 Sekunden (Dateien benötigten 1,6 Sekunden zum Laden)
0 Beispiele, 0 Fehler, 1 Fehler außerhalb der Beispiele aufgetreten

Ich bin nie in config.before('suite') gelangt.

3 „Gefällt mir“