Discourse Assign - bug derrubando o site

Recentemente, alterei a configuração do site para o(s) grupo(s) que podem usar o Discourse Assign. Algo deu terrivelmente errado ao clicar no botão de atualização, derrubando todo o site.

Desde então, desativei o Discourse Assign, o que trouxe o site de volta, mas não consigo fazer o Discourse Assign funcionar novamente. Quando o reativo, o site é derrubado, e não consigo alterar as configurações do site para o plugin Discourse Assign.

Estou analisando os registros de erro; há dois:

ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  sintaxe de entrada inválida para inteiro: "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:  sintaxe de entrada inválida para inteiro: "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

O plugin discourse-assign está atualizado na sua instância? Ou talvez você tenha feito um fork do plugin há algum tempo? Houve uma alteração no plugin discourse-assign em julho que parece relevante para os erros que você está vendo.

2 curtidas

Oi Penar, tenho quase certeza de que estava atualizado. Atualizo tudo regularmente, incluindo plugins.

Acho que vou ter que restaurar. O último backup foi antes de eu alterar aquela configuração do site.

Olá @jerry0,

De acordo com os logs, parece que o plugin está atualizado. Qual versão do Discourse você está usando?

2 curtidas

mais recente, atualmente 2.4.0.beta4

Hmm, entendi. Você alterou a configuração antes ou depois de atualizar para beta4?

Parece que, de alguma forma, nossa migração automática não conseguiu atualizar sua configuração. Vou investigar por que isso aconteceu. Você tentou reiniciar o servidor antes de ativar o plugin, caso o valor antigo pudesse ter sido armazenado em cache? Me avise se isso não funcionar e eu fornecerei um script Ruby para corrigir o problema manualmente.

1 curtida

Obrigado, @Roman

Isso aconteceu antes de eu atualizar. Algo estranho ocorreu quando adicionei a nova configuração; acho que pressionei o visto verde antes de “adicionar” o novo nome do grupo.

Não tenho certeza de como fazer isso (a propósito, posso ter falado errado ao dizer “desativado/ativado” no meu OP — o que quis dizer foi que comentei a URL do git clone no arquivo app.yml para adicionar o plugin). Quando adiciono o plugin no arquivo yml, o site trava imediatamente (e ele já estava ativado anteriormente), então não consigo entrar e defini-lo como desativado… a menos que eu tenha entendido mal?

Pode ser necessário, seria muito bem-vindo.

Se não for incômodo, gostaria de validar mais uma coisa antes de modificar manualmente a configuração.

Você pode executar este código no console do Rails e me informar o resultado?

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

Isso deve nos dizer se falhamos ao migrar o valor da configuração.

Para acessar o console:

  • cd na pasta do seu Discourse
  • Entre no container executando ./launcher enter app
  • Abra um console do Rails executando rails c
3 curtidas

a resposta é

=> [“patently-staff”]

1 curtida

Obrigado, Jerry.

Definitivamente há algo acontecendo aqui. Vou dar uma olhada e ver por que isso está ocorrendo.

Aqui está o 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'")

Após executá-lo, você deverá poder reativar o plugin.

7 curtidas

Perfeito, funcionou :grin: Obrigado @Roman. Avise-me se houver algo que eu possa fornecer para ajudar ainda mais.

1 curtida

Olá Roman,
Temos um problema semelhante com o plugin discourse-assign no nosso site após a atualização para a versão 2.4.0beta4.

O problema ocorre apenas com usuários que fazem login via LDAP. (utilizamos “GitHub - jonmbake/discourse-ldap-auth: Discourse plugin to enable LDAP/Active Directory authentication. · GitHub” para a conexão LDAP)

A resposta à consulta DB.query é:
=> [“staff”]
mas “Group.where(name: ‘staff’).pluck(:id).join(‘|’)” retorna “”.

Aliás: Na versão “2.4.0.beta1 +203”, as respostas são semelhantes, mas o login via LDAP é possível. (versão do LDAP 0.4.0, versão do assign 0.1)

Qualquer ajuda será bem-vinda,
Obrigado,
Frank

Olá @diwr,

De acordo com essa consulta, você não tem um grupo chamado staff. Talvez você o tenha renomeado para algo diferente?

Você pode verificar isso executando: Group.where(id: 3).pluck(:name)

Acho que a migração não funcionará se o grupo staff foi renomeado. Vou dar uma olhada nisso hoje.

2 curtidas

Obrigado @Roman

Parece que foi renomeado para “team”.
O que fazer agora?

Você pode executar o script usando “team” como nome do grupo.

4 curtidas

@Roman
Muito obrigado.
Tive que executar “./launcher rebuild app” após definir o valor, mas depois funcionou.

6 curtidas