Falha no upload de tags com caracteres especiais via CSV

Olá - Estou tentando fazer upload de um arquivo CSV com vários tags, mas toda vez recebo a mensagem de erro: “Desculpe, ocorreu um erro ao fazer upload do arquivo. Por favor, tente novamente.”

Os logs no painel de administração dizem:

Mensagem (8 cópias relatadas)

Falha ao processar resposta interceptada corretamente: Validação falhou: Nome é inválido

Backtrace

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/validations.rb:80:in `raise_validation_error'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/validations.rb:53:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:318:in `block in save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/database_statements.rb:278:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:366:in `with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:318:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/suppressor.rb:48:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/persistence.rb:55:in `create!'

Tentei criar um tag fictício, ou seja, apenas uma entrada no arquivo CSV (por exemplo, a palavra java), e recebo a mesma mensagem de erro.

FYI, instalei o Discourse no DigitalOcean usando o guia de instalação oficial e tudo o mais está funcionando corretamente.

Obrigado!

Podemos reproduzir isso na segunda-feira, @tshenry?

Obrigado @codinghorror - por favor, me avise se encontrar algo. Se ajudar, estou executando a versão 2.5.0.beta7 ( 14dc6f350e ) em um Droplet com 4 GB de RAM e 80 GB de SSD.

Além disso, instalei os plugins akismet, formatting-toolbar e discourse-voting.

Acabei de testar isso no try.discourse.org. Usei um editor de texto básico para criar um arquivo CSV chamado tags.csv contendo apenas a palavra java e consegui usar a ferramenta de upload em massa de tags para adicionar a nova tag sem problemas.

O site try.discourse.org possui Akismet e Discourse-voting, e duvido muito que o plugin formatting-toolbar cause algum conflito que resulte no erro que você está vendo.

Você consegue fazer upload de arquivos sem problemas em outros contextos (postagens, temas, etc.)?

Olá @tshenry - sim, consigo fazer upload de imagens em posts que eu crio, se é isso que você está perguntando.

Destruí o droplet, reinstalei o Discourse e estou usando apenas os seguintes plugins.

O upload ainda falha. Isso tem algo a ver com permissões? Como sou o administrador do site, presumo que deveria ter todas as permissões para fazer isso.

Desta vez, estou usando a versão 2.5.0.beta7 (70e50a2255).

Avise-me se há mais alguma coisa que você gostaria que eu tentasse. Obrigado!

Ah - encontrei algo interessante @codinghorror @tshenry.

Se o arquivo de tags se chamar tags-1.csv, recebo um erro de upload. Se nomear o arquivo como tags.csv, o upload das tags é bem-sucedido :slight_smile:

Essa nomenclatura é algo que o Discourse exige (e eu perdi ao ler sobre), ou talvez seja um bug?

Hmm, tentei renomear meu arquivo para tags-1.csv e ainda não consegui reproduzir o erro. Se você mudar de volta para tags-1.csv e tentar fazer o upload, ele falha novamente? Estou me perguntando se havia algo mais acontecendo no nome do seu arquivo original e se mudar para tags.csv de alguma forma resolveu o problema.

Não, ainda não funciona para mim. No meu Mac, estou apenas fazendo:

$ vi tags-1.csv

Depois,
i para entrar no modo de edição
java
esc para sair do modo de edição
:wq e Enter para salvar e sair.

É isso. Isso também falha. Inicialmente, pensei que pudesse ter algo a ver com uma planilha do Excel exportada para CSV, mas, mesmo a edição pela linha de comando está gerando problemas.

Vou continuar por enquanto com tags.csv, mas, se você achar isso importante e quiser que eu execute testes, ficarei feliz em fazer. A mesma coisa aconteceu em dois droplets diferentes com instalações novas, o que me preocupou.

Obrigado @tshenry.

Vejo outro problema (novamente, não tenho certeza se isso está relacionado ao meu ambiente).

Minhas tags são uma lista de linguagens de programação. Eu tinha C++ e C# nessa lista e, assim que as removi do tags.csv, o upload em massa foi concluído com sucesso. Estou me perguntando se isso tem a ver com a tag terminando com um caractere especial. Novamente, pode ser apenas comigo :man_shrugging:

Isso quase certamente é o problema. Será que podemos retornar um erro mais claro aqui para tags inválidas?

Sim! Esse é definitivamente o problema. Eu estava pensando que estávamos trabalhando apenas com a palavra java no arquivo, dado seu último post. Você precisaria usar algo como cpp, c-sharp, etc.

Sim, acho que isso seria ideal. O erro atual não oferece muita orientação ao usuário:

Desculpe, ocorreu um erro ao fazer o upload desse arquivo. Por favor, tente novamente.

Uma observação interessante da qual eu não tinha conhecimento: ao tentar criar uma tag nos contextos normais de criação ou edição de tópicos, parece que simplesmente removemos silenciosamente qualquer símbolo. Então, ao digitar C++, ele sugeriria C como a tag.

Eu ia editar o texto (para indicar a possibilidade de tags inválidas), mas acho que esse texto se aplica a todos os uploads, então nem sempre seria preciso.

Uma maneira rápida, na minha opinião, seria adicionar algumas frases sobre isso na seção de Tags das Configurações de Admin, descrevendo as restrições em torno dos nomes de tags.

E, talvez, um aviso no guia de Tags do Discourse (Admin guide to tags in Discourse)

Sim, isso definitivamente parece ser o caso. Encontrei onde o erro genérico é lançado no código de upload de tags, então vou tentar criar um erro mais específico para este caso em um PR.