Ao mesclar dois usuários via linha de comando, a mesclagem falhou devido a uma falha no plugin de especialistas por categoria. Desativar o plugin antes da mesclagem resolveu o problema.
rake aborted!
ActiveRecord::RecordInvalid: Validation failed: Body can't be blank, Body seems unclear, is it a complete sentence? (ActiveRecord::RecordInvalid)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/validations.rb:87:in `raise_validation_error'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/validations.rb:54:in `save!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:365:in `block in save!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:417:in `block (2 levels) in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/transaction.rb:626:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/transaction.rb:623:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:367:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:359:in `transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:413:in `block in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:416:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_handling.rb:312:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:409:in `with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:365:in `save!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/suppressor.rb:56:in `save!'
/var/www/discourse/plugins/discourse-category-experts/plugin.rb:351:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:637:in `block in on'
/var/www/discourse/lib/discourse_event.rb:12:in `block in trigger'
/var/www/discourse/lib/discourse_event.rb:12:in `trigger'
/var/www/discourse/app/models/post.rb:878:in `set_owner'
/var/www/discourse/app/services/post_owner_changer.rb:30:in `bl
on(:post_owner_changed) do |post, old_owner, new_owner|
previously_approved = !post.custom_fields[CategoryExperts::POST_PENDING_EXPERT_APPROVAL]
post.custom_fields.delete(CategoryExperts::POST_APPROVED_GROUP_NAME)
post.custom_fields.delete(CategoryExperts::POST_PENDING_EXPERT_APPROVAL)
post.save!
CategoryExperts::PostHandler.new(post: post, user: new_owner).process_new_post(
previously_approved: previously_approved,
)
end
Como a única modificação ali é em post.custom_fields, acredito que post.save! seja desnecessário e post.save_custom_fields seria suficiente aqui.