"unbekannter Fehler" beim Login, undefinierte Methode `password_algorithm='

Ich habe eine phpbb3-Migration über eine bekanntermaßen gute “Vorlage” von /shared ausgeführt (wie ich es schon ein paar Mal pro Woche getan habe, während ich Dinge verbessert habe), und danach konnte ich mich nicht mehr anmelden.

Ich erhielt eine “Unbekannter Fehler”-Meldung im Anmeldedialog, und die Konsole zeigte einen 500-Fehler beim POST. Der Versuch, ein Passwort von Rails aus zu ändern oder die Aufgabe admin:create zu verwenden, führte zu einem Fehler wie diesem:

docker exec -it dc rake admin:create
Email:  testadmin123@example.com
Password:
Repeat password:
rake aborted!
NoMethodError: undefined method `password_algorithm=' for #<User id: nil, username: "d8b57755b12086606777", created_at: nil, updated_at: nil, name: nil, seen_notification_id: 0, last_posted_at: nil, password_hash: nil, salt: "7512e03d29d4990a0bce5dd9b5954adc", active: false, username_lower: "d8b57755b12086606777", last_seen_at: nil, admin: false, last_emailed_at: nil, trust_level: 0, approved: false, approved_by_id: nil, approved_at: nil, previous_visit_at: nil, suspended_at: nil, suspended_till: nil, date_of_birth: nil, views: 0, flag_level: 0, ip_address: nil, moderator: false, title: nil, uploaded_avatar_id: nil, locale: nil, primary_group_id: nil, registration_ip_address: nil, staged: false, first_seen_at: nil, silenced_till: nil, group_locked_trust_level: nil, manual_locked_trust_level: nil, secure_identifier: nil, flair_group_id: nil, last_seen_reviewable_id: nil>
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activemodel-7.0.4.3/lib/active_model/attribute_methods.rb:458:in `method_missing'
/var/www/discourse/app/models/user.rb:1882:in `ensure_password_is_hashed'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:400:in `block in make_lambda'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:199:in `block (2 levels) in halting'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:687:in `block (2 levels) in default_terminator'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:686:in `catch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:686:in `block in default_terminator'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:200:in `block in halting'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:595:in `block in invoke_before'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:595:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:595:in `invoke_before'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:116:in `block in run_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:138:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/callbacks.rb:929:in `_run_save_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/callbacks.rb:457:in `create_or_update'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/timestamp.rb:126:in `create_or_update'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/persistence.rb:615:in `save'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/validations.rb:47:in `save'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/transactions.rb:298:in `block in save'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/transactions.rb:298:in `save'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/suppressor.rb:50:in `save'
/var/www/discourse/lib/tasks/admin.rake:87:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => admin:create
(See full trace by running task with --trace)

Ein paar Stunden später hat das Neuerstellen das Problem behoben. Haben Sie das schon einmal gesehen?

Ende gut, alles gut, aber ich fand es seltsam.

Höchstwahrscheinlich hatten Sie eine ausstehende Datenbankmigration, als Sie versuchten, admin:create auszuführen. (Die Spalte password_algorithm wurde kürzlich zur Benutzertabelle hinzugefügt)

4 „Gefällt mir“

Interessant.

Kannst du erraten, was die Migrationen schließlich ausgelöst hat? Ein Neustart hat es nicht behoben. Warten schien es auch nicht zu beheben. Das erneute Erstellen des Containers hat es jedoch getan.

Migrationen werden beim Upgrade über die Admin-Benutzeroberfläche oder bei einem Rebuild ausgeführt.

1 „Gefällt mir“

Das ergibt Sinn. Was passiert ist, war, dass der Container neuer war als sein /shared, sodass noch keine Migrationen angewendet werden mussten.

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.