Проблема с назначением в Discourse выводит сайт из строя

Недавно я изменил настройку сайта для группы (групп), которые могут использовать Discourse Assign. При нажатии кнопки «Обновить» что-то пошло не так, и весь сайт перестал работать.

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

Я изучаю журналы ошибок, и вот две из них:

ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
                                                             ^
: SELECT  1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:69:in `async_exec_params'

И:

Failed to handle exception in exception app middleware : PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
                                                             ^
: SELECT  1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1

Актуален ли плагин discourse-assign в вашем экземпляре? Или, возможно, вы форкнули плагин довольно давно? В июле в плагине discourse-assign произошло изменение, которое, по-видимому, имеет отношение к ошибкам, которые вы наблюдаете.

2 лайка

Привет, Penar, я почти уверен, что всё было актуально, я регулярно обновляю всё, включая плагины.

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

Привет @jerry0,

Судя по логам, плагин актуален. Какая версия Discourse у вас установлена?

2 лайка

последняя, в настоящее время 2.4.0.beta4

Хм, понятно. Вы изменили настройку до или после обновления до beta4?

Похоже, что автоматическая миграция по какой-то причине не смогла обновить вашу настройку. Я начну расследование, чтобы выяснить причину этого. Попробовали ли вы перезапустить сервер перед включением плагина на случай, если старое значение могло быть закэшировано? Дайте знать, если это не поможет, и я предоставлю вам Ruby-скрипт для ручного исправления проблемы.

1 лайк

Спасибо, @Roman

Это произошло до моего обновления. Что-то странное случилось, когда я добавлял новую настройку: кажется, я нажал зелёную галочку, ещё не «добавив» новое имя группы.

Не уверен, как это сделать (кстати, возможно, я ошибся, сказав «отключил/включил» в своём первом сообщении — я имел в виду, что закомментировал URL git clone в файле app.yml, чтобы добавить плагин). Когда я добавляю плагин в файл yml, сайт сразу же падает (а ранее он был включён), поэтому я не могу зайти и отключить его… если только я вас неправильно понял?

Это может быть необходимо, буду очень благодарен.

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

Можете выполнить этот код в консоли Rails и сообщить мне результат?

DB.query_single(<<~SQL
  SELECT site_settings.value FROM site_settings WHERE site_settings.name = 'assign_allowed_on_groups'
SQL
).first.to_s.split('|')

Это должно показать, не произошла ли ошибка при миграции значения настройки.

Чтобы получить доступ к консоли:

  • cd в папку вашего Discourse
  • Войдите в контейнер, выполнив ./launcher enter app
  • Откройте консоль Rails, выполнив rails c
3 лайка

ответ

=> [“patently-staff”]

1 лайк

Спасибо, Джерри.

Здесь определённо что-то происходит. Я проверю и выясню, почему это случилось.

Вот скрипт:


group_id = Group.where(name: 'patently-staff').pluck(:id).join('|')

DB.exec("UPDATE site_settings SET value='#{group_id}' WHERE site_settings.name = 'assign_allowed_on_groups'")

После его выполнения вы сможете снова включить плагин.

7 лайков

Отлично, сработало :grin: Спасибо, @Roman. Дайте знать, если я смогу чем-то ещё помочь.

1 лайк

Привет, Роман,

У нас возникла похожая проблема с плагином discourse-assign на нашем сайте после обновления до версии 2.4.0beta4.

Проблема проявляется только у пользователей, входящих через LDAP. (мы используем «https://github.com/jonmbake/discourse-ldap-auth» для подключения к LDAP)

Ответ на запрос DB.query:
=> [“staff”]
но “Group.where(name: ‘staff’).pluck(:id).join(‘|’)” возвращает “”.

Кстати: в версии “2.4.0.beta1 +203” ответы аналогичны, но вход через LDAP возможен. (версия LDAP 0.4.0, версия assign 0.1)

Будем благодарны за любую помощь.
Спасибо,
Фрэнк

Привет @diwr,

Согласно этому запросу, у вас нет группы с названием staff. Возможно, вы переименовали её во что-то другое?

Вы можете проверить это, выполнив: Group.where(id: 3).pluck(:name)

Я думаю, что миграция не сработает, если группа staff была переименована. Я займусь этим сегодня.

2 лайка

Спасибо, @Roman.

Похоже, это переименовали в «team».
Что делать теперь?

Вы можете запустить скрипт, используя “team” в качестве имени группы.

4 лайка

@Roman
Спасибо большое.
После установки значения мне пришлось выполнить «./launcher rebuild app», но затем всё заработало.

6 лайков