"500 Internal Server Error" при одобрении поста в очереди на проверку

Здравствуйте,

Я использую версию Discourse 2.5.1 и получаю ошибку “500 Internal Server Error” при одобрении сообщения в очереди на проверку.

Вот сообщение об ошибке из /logs:

Сообщение (7 дубликатов)

ActiveRecord::StatementInvalid (PG::InFailedSqlTransaction: ERROR: текущая транзакция прервана, команды игнорируются до конца блока транзакции
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:72:in `exec_params'

Обратная трассировка

rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:72:in `exec_params'
rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:72:in `exec_params'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:675:in `block (2 levels) in exec_no_cache'
activesupport-6.0.3.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
activesupport-6.0.3.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport-6.0.3.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:674:in `block in exec_no_cache'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract_adapter.rb:722:in `block (2 levels) in log'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract_adapter.rb:721:in `block in log'
activesupport-6.0.3.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract_adapter.rb:712:in `log'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:673:in `exec_no_cache'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:654:in `execute_and_clear'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:111:in `exec_delete'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/database_statements.rb:180:in `delete'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `delete'
activerecord-6.0.3.1/lib/active_record/relation.rb:587:in `delete_all'
/var/www/discourse/app/models/topic_link.rb:376:in `cleanup_entries'
/var/www/discourse/app/models/topic_link.rb:139:in `extract_from'
/var/www/discourse/lib/post_creator.rb:576:in `extract_links'
/var/www/discourse/lib/post_creator.rb:180:in `block in create'
/var/www/discourse/lib/post_creator.rb:359:in `block in transaction'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/database_statements.rb:278:in `transaction'
activerecord-6.0.3.1/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/lib/post_creator.rb:358:in `transaction'
/var/www/discourse/lib/post_creator.rb:174:in `create'
/var/www/discourse/app/models/reviewable_queued_post.rb:80:in `perform_approve_post'
/var/www/discourse/app/models/reviewable.rb:355:in `public_send'
/var/www/discourse/app/models/reviewable.rb:355:in `block in perform'

Мы сталкиваемся с той же проблемой в тех же обстоятельствах, что и описала Камий.

Поэтому мы сначала попробовали отредактировать пост, а затем снова попытались его одобрить, но проблема сохраняется.

Есть ли какое-то решение?

Спасибо

У меня всё ещё та же проблема с версией v2.5.2 +2.
Похоже, это происходит с постами, которые срабатывают опцию «Автоматически заглушать быстрых печатателей при первом посте».

Привет, @CamilleRoux!

Мне не удалось воспроизвести это локально, возможно, я что-то упускаю. Это происходит при попытке одобрить любой пост из очереди или только для конкретного?

У меня больше нет сообщений на проверке… Что я могу сделать, чтобы предоставить вам больше информации?

Я только что установил параметр «утверждать новые темы, если уровень доверия» на максимальное значение, и теперь при создании новой темы возникает ошибка 500. Похоже, это очень похожая ошибка:

ActiveRecord::StatementInvalid (PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:72:in `exec_params'

Обратная трассировка

rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:72:in `exec_params'
rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:72:in `exec_params'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:675:in `block (2 levels) in exec_no_cache'
activesupport-6.0.3.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
activesupport-6.0.3.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport-6.0.3.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:674:in `block in exec_no_cache'
activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract_adapter.rb:722:in `block (2 levels) in log'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
activesupport-6.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'

Можете ли вы зайти в контейнер и проверить логи PostgreSQL на наличие ошибки в тот же временной промежуток?

Вот ошибка (относительно ошибки темы):

2020-10-01 18:37:18.894 UTC [25661] discourse@discourse ERROR:  null value in column "private_message" violates not-null constraint
2020-10-01 18:37:18.894 UTC [25661] discourse@discourse DETAIL:  Failing row contains (8803, 'a':25 'api':4A,17 'arriv':23 'avanc':48 'bas':14 'cod':54 'comm..., Comment obtenir l'API odoo sur React Native? Developpement J'u..., fr, 3, null).
2020-10-01 18:37:18.894 UTC [25661] discourse@discourse STATEMENT:  INSERT INTO post_search_data
	(post_id, search_data, locale, raw_data, version)
	VALUES (8803, setweight(to_tsvector('french', coalesce('Comment obtenir l''API odoo sur React Native?','')), 'A') ||
	setweight(to_tsvector('french', coalesce('Developpement','')), 'B') ||
	setweight(to_tsvector('french', coalesce('','')), 'C') ||
	setweight(to_tsvector('french', coalesce('J’utilise Odoo comme base de donnees API sur react native mais j’arrive pas a me connecter, j’ai utilise le package npm react-native-odoo , vous pouvez voir mon erreur sur l’image. Merci d’avance pour vos reponses Voici mon Code oddo et l’erreur que j’obtiens error','')), 'D')
	, 'fr', 'Comment obtenir l''API odoo sur React Native? Developpement J’utilise Odoo comme base de donnees API sur react native mais j’arrive pas a me connecter, j’ai utilise le package npm react-native-odoo , vous pouvez voir mon erreur sur l’image. Merci d’avance pour vos reponses Voici mon Code oddo et l’erreur que j’obtiens error', 3)

2020-10-01 18:37:18.897 UTC [25661] discourse@discourse ERROR:  current transaction is aborted, commands ignored until end of transaction block
2020-10-01 18:37:18.897 UTC [25661] discourse@discourse STATEMENT:  UPDATE topic_search_data
	SET
	   raw_data = 'Comment obtenir l''API odoo sur React Native? J’utilise Odoo comme base de donnees API sur react native mais j’arrive pas a me connecter, j’ai utilise le package npm react-native-odoo , vous pouvez voir mon erreur sur l’image. Merci d’avance pour',
	   locale = 'fr',
	   search_data = setweight(to_tsvector('french', coalesce('Comment obtenir l''API odoo sur React Native?','')), 'A') ||
	setweight(to_tsvector('french', coalesce('J’utilise Odoo comme base de donnees API sur react native mais j’arrive pas a me connecter, j’ai utilise le package npm react-native-odoo , vous pouvez voir mon erreur sur l’image. Merci d’avance pour','')), 'B') ||
	setweight(to_tsvector('french', coalesce(NULL,'')), 'C') ||
	setweight(to_tsvector('french', coalesce(NULL,'')), 'D')
	,
	   version = 3
	WHERE topic_id = 4351

2020-10-01 18:37:18.900 UTC [25661] discourse@discourse ERROR:  current transaction is aborted, commands ignored until end of transaction block
2020-10-01 18:37:18.900 UTC [25661] discourse@discourse STATEMENT:  DELETE FROM "topic_links" WHERE ((post_id = 8803 AND NOT reflection) OR (link_post_id = 8803 AND reflection))

Спасибо, это очень помогает!

Вы отслеживали ветку beta в какой-то момент, а затем переключились на stable? Столбец private_message был добавлен в версии v2.6.0.beta2, но этот коммит не включён в v2.5.2 +2. Вот сам коммит:

Ой… Да, я это сделал, моя ошибка. Большое спасибо!

Не знаете, скоро ли будет выпущена следующая стабильная версия?

Это полностью не поддерживается и приведёт к неработоспособности Discourse. Как можно скорее вернитесь к значениям по умолчанию tests-passed или beta.

Мы выпускаем «стабильную» версию примерно раз в 6 месяцев. Следующая версия отслеживается в теме Discourse Version 2.6.