Discourse Assign: bug che sta portando giù il sito

Recentemente ho modificato l’impostazione del sito per i gruppi che possono utilizzare Discourse Assign. Quando ho premuto il pulsante di aggiornamento, qualcosa è andato terribilmente storto e l’intero sito è andato offline.

Da allora ho disabilitato Discourse Assign, il che ha riportato il sito online, ma non riesco a farlo funzionare di nuovo. Quando lo riabilito, il sito viene nuovamente messo offline e non posso modificare le impostazioni del sito per il plugin Discourse Assign.

Sto esaminando i log degli errori; ce ne sono due:

ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  sintassi di input non valida per intero: "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'

E:

Failed to handle exception in exception app middleware : PG::InvalidTextRepresentation: ERROR:  sintassi di input non valida per intero: "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

Il plugin discourse-assign è aggiornato nella tua istanza? O forse hai fatto un fork del plugin un po’ di tempo fa? A luglio è stato apportato un cambiamento nel plugin discourse-assign che sembra rilevante per gli errori che stai riscontrando.

2 Mi Piace

Ciao Penar, sono quasi sicuro che fosse aggiornato, aggiorno regolarmente tutto, inclusi i plugin.

Penso che dovrò ripristinare; l’ultimo backup è stato fatto prima di modificare quella impostazione del sito.

Ciao @jerry0,

Secondo i log, sembra che il plugin sia aggiornato. Quale versione di Discourse stai utilizzando?

2 Mi Piace

ultime, attualmente 2.4.0.beta4

Hmm, capisco. Hai modificato l’impostazione prima o dopo l’aggiornamento a beta4?

Sembra che, per qualche motivo, la nostra migrazione automatica non sia riuscita ad aggiornare la tua impostazione. Investigherò sul perché sia successo. Hai provato a riavviare il server prima di abilitare il plugin, nel caso in cui il vecchio valore fosse stato memorizzato nella cache? Fammi sapere se questo non funziona e ti fornirò uno script Ruby per risolvere manualmente il problema.

1 Mi Piace

Grazie @Roman

È successo prima dell’aggiornamento. È capitato qualcosa di strano mentre aggiungevo la nuova impostazione; penso di aver premuto il segno di spunta verde prima di “aggiungere” il nuovo nome del gruppo.

Non sono sicuro di come farlo (a proposito, potrei aver detto male quando ho menzionato “disattivato/attivato” nel mio primo messaggio: intendevo dire che ho commentato l’URL git clone nel file app.yml per aggiungere il plugin). Quando aggiungo il plugin nel file yml, il sito si blocca immediatamente (e in precedenza era attivo), quindi non riesco ad entrare e impostarlo come disattivato… a meno che non abbia frainteso?

Potrebbe essere necessario, lo accoglierei con grande piacere.

Se non ti dispiace, vorrei verificare un’ultima cosa prima di modificare manualmente l’impostazione.

Puoi eseguire questo codice nella console di Rails e farmi sapere l’output?

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

Questo dovrebbe dirci se non siamo riusciti a migrare correttamente il valore dell’impostazione.

Per accedere alla console:

  • cd nella cartella di Discourse
  • Entra nel container eseguendo ./launcher enter app
  • Apri una console Rails eseguendo rails c
3 Mi Piace

la risposta è

=> [“patently-staff”]

1 Mi Piace

Grazie, Jerry.

C’è sicuramente qualcosa che non va qui. Darò un’occhiata per capire perché sta succedendo.

Ecco lo script:


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'")

Dopo averlo eseguito, dovresti poter riattivare il plugin.

7 Mi Piace

Perfetto, ha funzionato :grin: Grazie @Roman. Fammi sapere se c’è qualcosa che posso fornire per aiutare ulteriormente.

1 Mi Piace

Ciao Roman,
abbiamo un problema simile con il plugin discourse-assign sul nostro sito dopo l’aggiornamento alla versione 2.4.0beta4.

Il problema si presenta solo per gli utenti che accedono tramite LDAP. (utilizziamo “GitHub - jonmbake/discourse-ldap-auth: Discourse plugin to enable LDAP/Active Directory authentication. · GitHub” per la connessione LDAP)

La risposta alla query DB è:
=> [“staff”]
ma “Group.where(name: ‘staff’).pluck(:id).join(‘|’)” restituisce “”.

A proposito: nella versione “2.4.0.beta1 +203” le risposte sono simili, ma l’accesso tramite LDAP è possibile. (versione LDAP 0.4.0, versione assign 0.1)

Qualsiasi aiuto è benvenuto,
Grazie,
Frank

Ciao @diwr,

Secondo quella query, non hai un gruppo chiamato staff. Forse lo hai rinominato in qualcos’altro?

Puoi verificare eseguendo: Group.where(id: 3).pluck(:name)

Penso che la migrazione non funzionerà se il gruppo staff è stato rinominato. Ci darò un’occhiata oggi.

2 Mi Piace

Grazie @Roman

Sembra che sia stato rinominato in “team”
Cosa fare adesso?

Puoi eseguire lo script utilizzando “team” come nome del gruppo.

4 Mi Piace

@Roman
Grazie mille.
Ho dovuto eseguire “./launcher rebuild app” dopo aver impostato il valore, ma poi ha funzionato.

6 Mi Piace