Проблема с публикацией темы после переезда на новый сервер

У нас есть сайт на WordPress, где мы используем Discourse для входа и комментирования в WordPress.
Всё работало нормально, пока мы не перенесли WordPress (который всегда работал на отдельном сервере) на новый IP-адрес и другой сервер.

С тех пор в классическом редакторе появились статьи с настройками, показанными на изображении ниже, для которых ссылка на Discourse не создаётся даже после автоматической публикации.

Мне всегда приходится вручную открывать конкретную статью, просто сохранять её, и тогда ссылка на Discourse создаётся, и всё работает как надо.

Есть ли какие-то идеи, где искать причину проблемы?

Кто-нибудь подсказывает, где может быть проблема?
Единственное упоминание об ошибке, которое я нашел в логе, — это сообщение ниже, но мне не удалось найти ничего по этой записи.

[2024-06-14 06:45:38] webhook_topic.INFO: update_topic_content.update_post_metadata_success {"post_ids":"771554"} 
[2024-06-14 06:45:43] publish.INFO: create_post.post_success {"wp_title":"Конец иконического дизайна. Galaxy Buds 3 получат совершенно новый вид","wp_author_id":"94147","wp_post_id":771981} 
[2024-06-14 06:45:43] publish.INFO: create_post.body_valid {"wp_title":"Конец иконического дизайна. Galaxy Buds 3 получат совершенно новый вид","wp_author_id":"94147","wp_post_id":771981} 
[2024-06-14 06:45:43] publish.INFO: create_post.after_publish {"post_id":771981,"remote_post_type":"create_post","discourse_post_id":"10416","discourse_topic_id":"5899","discourse_permalink":"https://komunita.svetandroida.cz/t/konec-ikonickeho-designu-galaxy-buds-3-dostanou-zcela-novy-vzhled/5899"} 
[2024-06-14 06:45:43] webhook_topic.ERROR: update_topic_content.response_body_error

Скорее всего, стоит поискать в Meta update_topic_content.response_body_error :wink:

Привет, @Petr_Mišák

Есть ли у вас пример такой темы? Пример из ваших логов показывает, что тема в Discourse была успешно опубликована. Именно это означают эти строки:

[2024-06-14 06:45:43] publish.INFO: create_post.post_success {"wp_title":"Конец иконического дизайна. Galaxy Buds 3 получат совершенно новый облик","wp_author_id":"94147","wp_post_id":771981} 
[2024-06-14 06:45:43] publish.INFO: create_post.body_valid {"wp_title":"Конец иконического дизайна. Galaxy Buds 3 получат совершенно новый облик","wp_author_id":"94147","wp_post_id":771981} 
[2024-06-14 06:45:43] publish.INFO: create_post.after_publish {"post_id":771981,"remote_post_type":"create_post","discourse_post_id":"10416","discourse_topic_id":"5899","discourse_permalink":"https://komunita.svetandroida.cz/t/konec-ikonickeho-designu-galaxy-buds-3-dostanou-zcela-novy-vzhled/5899"} 

В последней строке этих логов вы можете увидеть ссылку на успешно опубликованную тему, то есть:

"discourse_permalink":"https://komunita.svetandroida.cz/t/konec-ikonickeho-designu-galaxy-buds-3-dostanou-zcela-novy-vzhled/5899"

Ошибка вебхука, которую вы видите сразу после этого, указывает на проблему с вебхуком, но это не обязательно свидетельствует о проблеме с самой публикацией.

Если вы сможете запустить новый тест, воспроизведя проблему, и посмотрите на созданные логи publish, это даст нам представление о проблеме, которую вы описали.

Также, не могли бы вы уточнить, что вы имеете в виду под «перевести статью»?

Я всегда должен вручную заходить в конкретную статью и просто переводить её

Что именно вы делаете в этом случае?

Я подозреваю, что ваша установка Discourse могла закэшировать запись DNS и использует IP-адрес вашей старой установки WP. Самый быстрый способ проверить это — перезапустить контейнер и посмотреть, исчезнет ли проблема.

Скорее всего, в логе отображается запись о состоянии, когда я сохранял статью вручную. Извините, это опечатка: должно было быть «сохранить вручную». Я тоже подумал о DNS и сразу после переноса WordPress на новый сервер выполнил команду «./launcher rebuild app», но, возможно, с точки зрения DNS это было слишком рано. Попробую ещё раз.

Извините, просто уточню: вы имеете в виду, что лог не связан с проблемой автоматической публикации, о которой вы сообщили? Если нет, не могли бы вы предоставить лог события автоматической публикации?

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

Итак, текущая проблема заключается в том, что когда статья в WordPress должна автоматически опубликоваться в определённое время, ссылка на сообщество Discourse не создаётся. Однако если я впоследствии вручную отредактирую проблемную статью и просто сохраню её без каких-либо изменений, ссылка на сообщество Discourse будет создана.

В следующий раз, когда выйдет статья, найдите логи с меткой publish.INFO или publish.ERROR с похожей временной меткой и поделитесь здесь тем, что обнаружите.

В настоящее время автоматически запланированная статья Vaše hodinky Amazfit zřejmě budou ještě lepší! Blíží se velká aktualizace опубликована, но ссылки на Discourse до сих пор нет.

Её ID — 772581.

К сожалению, со времени нашего последнего общения в логе я вижу только эту информацию:

[2024-06-21 07:09:01] connection.INFO: check_connection_status.successful_connection  
[2024-06-21 07:09:01] connection.INFO: check_connection_status.valid_scopes  
[2024-06-21 07:23:30] webhook_topic.INFO: update_topic_content.update_post_metadata_success {"post_ids":"772615"} 
[2024-06-21 07:25:57] webhook_topic.INFO: update_topic_content.update_post_metadata_success {"post_ids":"772615"} 
[2024-06-21 07:42:03] webhook_topic.INFO: update_topic_content.update_post_metadata_success {"post_ids":"772857"} 
[2024-06-21 07:47:37] sso_client.INFO: auth_user.success {"user_id":129795} 
[2024-06-21 07:48:05] sso_client.INFO: auth_user.success {"user_id":152766} 
[2024-06-21 08:04:20] webhook_topic.INFO: update_topic_content.update_post_metadata_success {"post_ids":"772857"}

Прилагаю лог мета-данных. Я не смог ничего в нём понять.

### Этот файл включается в загрузки логов ###

### Сервер ###

WordPress - 6.5.4
PHP - 8.0.30
MySQL - 11.3.2

### Активные плагины ###

Advanced Google reCAPTCHA - 1.21
Allviews - 1.0.1
APS Arena Products - 2.5.5
Classic Editor - 1.6.3
Error Log Monitor - 1.7.8
FS Poster - 6.5.9
GTM4WP - Плагин Google Tag Manager (GTM) для WordPress - 1.20.2
Head, Footer and Post Injections - 3.2.8
Kontrola uploadovaných obrázků - 1.0
Limit Modified Date - 1.0.0
Lnk.Bio - 0.2.2
Lokální ukládání Gravatarů - 1.4
Lynt Custom Functions - 1.0.3
Pixwords Scenes Nápověda - 1.0.2
Rank Math SEO PRO - 3.0.64
Rank Math SEO with AI SEO Tools - 1.0.221
Redakční Tools - bez expirace - 2.0.12
SA Partner Products Feed - 1.0
Simple Local Avatars - 2.7.10
Speculative Loading - 1.3.1
Super Progressive Web Apps - 2.2.27
SZ Ad Manager API - 1.3.21
Webpushr Push Notifications - 4.36.0
WordPress Editorial Calendar - 3.8.5
WP-Appbox - 4.4.19
WP-Discourse - 2.5.3
WP-PostViews - 1.77
Wpify Performance Helper - master
WP Shortcode by MyThemeShop - 1.4.17
WP Shortcode by MyThemeShop extend by Svět Zítřka - 1.16

### Настройки WP Discourse (секретные данные исключены) ###

connection-logs - 1
display-subcategories - 0
allow-tags - 0
max-tags - 5
publish-as-unlisted - 1
full-post-content - 0
custom-excerpt-length - 55
add-featured-link - 1
auto-publish - 1
force-publish - 1
force-publish-max-age - 0
publish-failure-notice - 1
auto-track - 1
allowed_post_types - post,page
exclude_tags - 
hide-discourse-name-field - 0
discourse-username-editable - 0
direct-db-publication-flags - 0
verbose-publication-logs - 1
enable-discourse-comments - 1
comment-type - display-comments-link
ajax-load - 0
load-comment-css - 0
discourse-new-tab - 0
hide-wordpress-comments - 0
show-existing-comments - 1
max-comments - 0
min-replies - 1
min-score - 0
min-trust-level - 1
bypass-trust-level-score - 50
only-show-moderator-liked - 0
custom-datetime-format - 
cache-html - 1
clear-cached-comment-html - 0
verbose-comment-logs - 1
use-discourse-webhook - 1
webhook-match-old-topics - 0
use-discourse-user-webhook - 0
webhook-match-user-email - 0
verbose-webhook-logs - 1
verbose-sso-logs - 1
enable-sso - 0
auto-create-sso-user - 0
real-name-as-discourse-name - 0
force-avatar-update - 0
redirect-without-login - 0
sso-client-enabled - 1
sso-client-login-form-change - 1
sso-client-sync-by-email - 1
sso-client-disable-create-user - 0
sso-client-sync-logout - 1
logs-enabled - 1

Хорошо, ваша проблема — это старая проблема автоматической публикации запланированных сообщений.

Наиболее вероятная причина в том, что один из других плагинов на вашем сайте также подключается к вашей системе планирования, вызывая проблемы, с которыми другие сталкивались ранее. Судя по вашему списку плагинов, вероятным кандидатом является:

WordPress Editorial Calendar - 3.8.5

Попробуйте отключить его и посмотрите, сохранится ли проблема.

Спасибо за подсказку. Я заполнил настройки плагина, и в 12:00 по нашему времени мы узнаем, выйдет ли статья.

Однако такая же конфигурация плагина была и на предыдущем сервере, где всё работало нормально.

Warning: Undefined variable $status_url in /.../www/wp-content/plugins/wp-discourse/lib/sync-discourse-topic.php on line 230

Вот соответствующий фрагмент кода: $response = $this->discourse_request( $status_url, $args );

Вы на 100% уверены, что настройки были идентичными? Как вы это проверили?

Это касается вебхуков и не связано с вашей проблемой.

Да, настройка плагина Discourse на предыдущем сервере была идентичной, так как сервер и данные базы данных были перенесены физически.

К сожалению, дело оказалось не в этом плагине. В данный момент он отключен, и статья, которая только что вышла со ссылкой на Discourse, не получила Skvělý na cesty! Xiaomi vydalo maličký holicí strojek s nabíjením přes USB-C

В логах нет никаких записей о статье с ID 772245.

Однако, если я вручную открою проблемную статью и сохраню её, в логе появится следующее:

[2024-06-21 10:13:07] publish.INFO: create_post.post_success {"wp_title":"Skvělý na cesty! Xiaomi vydalo maličký holicí strojek s nabíjením přes USB-C","wp_author_id":"150202","wp_post_id":772245} 
[2024-06-21 10:13:07] publish.INFO: create_post.body_valid {"wp_title":"Skvělý na cesty! Xiaomi vydalo maličký holicí strojek s nabíjením přes USB-C","wp_author_id":"150202","wp_post_id":772245} 
[2024-06-21 10:13:07] publish.INFO: create_post.after_publish {"post_id":772245,"remote_post_type":"create_post","discourse_post_id":"10809","discourse_topic_id":"6138","discourse_permalink":"https://komunita.svetandroida.cz/t/skvely-na-cesty-xiaomi-vydalo-malicky-holici-strojek-s-nabijenim-pres-usb-c/6138"} 
[2024-06-21 10:13:07] webhook_topic.ERROR: update_topic_content.response_body_error  
[2024-06-21 10:13:07] webhook_topic.INFO: update_topic_content.update_post_metadata_success {"post_ids":"772245"}

Может ли проблема быть в том, что мы запускаем WP cron через WP CLI?

Да, это может быть причиной. Попробуйте запланировать публикацию через интерфейс WordPress и посмотрите, сработает ли это.

Хм, когда мы использовали обычный cron, а не только WP CLI, всё работало как положено.

Но я не понимаю, почему так происходит. Можно ли модифицировать плагин WordPress, чтобы он также был совместим с WP CLI?

Не помогло бы это @simon?

Как именно вы вызываете задачу cron? Обратите внимание, что при вызове wp cron на запрос влияют любые глобальные параметры wp: Config – WP-CLI – WordPress.org. Возможно, что-то в вашем конфигурационном файле wp влияет на то, как обрабатывается задача.

Эта команда запустит все запланированные задачи cron WordPress:

wp cron event run --due-now

Если вы вызываете только wp cron event run publish_future_post, возможно, события, необходимые для плагина WP Discourse для публикации поста, не срабатывают. Я думаю, это эквивалентно тому, как WordPress обрабатывает запланированные публикации внутри:

wp cron event run publish_future_post future_to_publish publish_post transition_post_status

Я не тестировал это. Я настраиваю новый компьютер и пока не установил на него сайт WordPress. Я сделаю это скоро.