Plugin de Armazenamento Blob do Azure

Eu o instalei ontem. Ainda estou explorando, mas parece funcionar bem em geral.

Olá

Estou tentando usar seu plugin… Algumas funcionalidades estão funcionando. Por exemplo, consigo adicionar o logotipo do meu site e ele vai para o meu armazenamento Azure Blob.

Mas

Quando faço o upload de uma imagem em uma postagem, a imagem não é exibida. Tenho o seguinte:

Citação ![quete-viking-coin-master|362x500](upload://tBpGuefbyQNcVbDgJzOyv32uxFX.jpeg)

Você tem alguma ideia? Seu plugin ainda está funcionando?

Obrigado pela resposta

Acabei de tentar instalar este plugin na versão v2.7.0 beta1 e obtive este erro, que parece semelhante ao problema do faraday mencionado acima, mas com o nokogiri:

I, [2021-01-13T22:25:07.678431 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle     exec rake db:migrate'
rake aborted!
Gem::ConflictError: Unable to activate azure-storage-common-2.0.1, because nokogiri-1.11.1-x86_64-linux conflicts with nokogiri (~> 1.10.4)
/var/www/discourse/lib/plugin_gem.rb:22:in `load'
/var/www/discourse/lib/plugin/instance.rb:705:in `gem'
/var/www/discourse/plugins/discourse-azure-blob-storage/plugin.rb:12:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:611:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:611:in `activate!'
lib/discourse.rb:228:in `block in activate_plugins!'
lib/discourse.rb:225:in `each'
lib/discourse.rb:225:in `activate_plugins!'
/var/www/discourse/config/application.rb:305:in `block in <class:Application>'
/var/www/discourse/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/var/www/discourse/config/application.rb:304:in `<class:Application>'
/var/www/discourse/config/application.rb:71:in `<module:Discourse>'
/var/www/discourse/config/application.rb:70:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

EDIT: Funciona perfeitamente com a versão: d6121249d3856a40382637ed12db50fc43c1fb1d (2.6.0)

1 curtida

Também estou recebendo esse erro após a atualização para a v2.7.0beta1. Este plugin pode ser atualizado para funcionar na versão mais recente?

I, [2021-01-19T19:52:36.859512 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake plugin:pull_compatible_all'
rake aborted!
Gem::ConflictError: Unable to activate azure-storage-common-2.0.1, because nokogiri-1.11.1-x86_64-linux conflicts with nokogiri (~> 1.10.4)
/var/www/discourse/lib/plugin_gem.rb:22:in `load'
/var/www/discourse/lib/plugin/instance.rb:705:in `gem'
/var/www/discourse/plugins/discourse-azure-blob-storage/plugin.rb:12:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:611:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:611:in `activate!'
lib/discourse.rb:228:in `block in activate_plugins!'
lib/discourse.rb:225:in `each'
lib/discourse.rb:225:in `activate_plugins!'
/var/www/discourse/config/application.rb:305:in `block in <class:Application>'
/var/www/discourse/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/var/www/discourse/config/application.rb:304:in `<class:Application>'
/var/www/discourse/config/application.rb:71:in `<module:Discourse>'
/var/www/discourse/config/application.rb:70:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

Ele está categorizado na categoria #plugin:broken-plugin, então não está funcionando no momento, e parece que não há ninguém interessado em deixá-lo funcional novamente.

2 curtidas

Essa é uma história triste. :frowning:

Só recebi esse erro ao tentar reconstruir hoje.

Basicamente, o gem azure-storage-common precisa atualizar sua versão, pois uma de suas dependências agora entra em conflito com o Discourse.

Para quem não pode esperar (compreendo seu sentimento, pois se o Azure Blob parar de funcionar repentinamente, seu site não voltará ou perderá todo o conteúdo), faça o pull do meu fork em vez disso:

Não acompanho o meta tanto quanto costumava, então posso não ver essas mensagens até meses depois. Para quem precisa, abra uma issue no meu repositório do GitHub e eu devo responder.

2 curtidas

Esperamos que o PR seja mesclado em breve e a tag broken-plugin possa ser removida.

Quando isso ocorre, geralmente são erros durante o pós-processamento.

Verifique seus logs do sidekiq para ver o que está impedindo o upload para o Azure.

Recebi um erro do Unicorn hoje ao reconstruir meu aplicativo:

E, [2021-03-29T01:34:52.651460 #756] ERROR -- : erro no app: constante IPAddr::PRIVATE_RANGES não inicializada (NameError)
E, [2021-03-29T01:34:52.651585 #756] ERROR -- : /var/www/discourse/plugins/discourse-azure-blob-storage/gems/2.7.2/gems/azure-storage-common-2.0.2/lib/azure/storage/common/core/utility.rb:218:in `private?'
E, [2021-03-29T01:34:52.651600 #756] ERROR -- : /var/www/discourse/lib/middleware/request_tracker.rb:220:in `is_private_ip?'
E, [2021-03-29T01:34:52.651612 #756] ERROR -- : /var/www/discourse/lib/middleware/request_tracker.rb:233:in `rate_limit'
E, [2021-03-29T01:34:52.651640 #756] ERROR -- : /var/www/discourse/lib/middleware/request_tracker.rb:166:in `call'
E, [2021-03-29T01:34:52.651650 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:527:in `call'
E, [2021-03-29T01:34:52.651660 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `public_send'
E, [2021-03-29T01:34:52.651670 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `method_missing'
E, [2021-03-29T01:34:52.651681 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
E, [2021-03-29T01:34:52.651691 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
E, [2021-03-29T01:34:52.651753 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
E, [2021-03-29T01:34:52.651768 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:634:in `process_client'
E, [2021-03-29T01:34:52.651779 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:732:in `worker_loop'
E, [2021-03-29T01:34:52.651789 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
E, [2021-03-29T01:34:52.651802 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:143:in `start'
E, [2021-03-29T01:34:52.651816 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/bin/unicorn:128:in `<top (required)>'
E, [2021-03-29T01:34:52.651830 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'
E, [2021-03-29T01:34:52.651843 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

Vou analisar isso com mais calma amanhã, mas a atualização acima não parece ter resolvido o problema.

@schungx

O erro parece indicar que você está usando um intervalo de IP privado?

1 curtida

Talvez eu esteja errado, mas isso sugere que a constante PRIVATE_RANGES não foi inicializada. Essa constante deve ser definida aqui:

Não tenho certeza se há um conflito de nomes entre a classe IPAddr definida no utility.rb acima e a definida no próprio Discourse, mas essa seria minha preocupação inicial. Só não tenho certeza de como proceder para corrigir isso. Minha primeira ideia seria enviar um PR que coloque a classe IPAddr do Discourse dentro de um módulo. Alguma outra opinião?

Parece que a chamada private? está na linha 221, em vez da linha 218, como indicado na mensagem de erro.

Então, talvez seja a versão errada?

A última versão em que a linha 218 faz sentido é a 1.1.0, onde você pode ver que é exatamente a posição do erro:

OK, estou realmente confuso aqui. Acontece que o plugin ainda não está correto.

Sempre que ele tenta armazenar um arquivo, retorna:

Blob can not be stored: missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent
Url: //chenhsongweb.blob.core.windows.net/support/original/2X/e/e5224c77df15646017fb5e4747576206c33904f6.jpeg

Então, obviamente, em algum lugar estou esquecendo um require 'net/http/persistent', mas tentei adicioná-lo em todos os lugares e ainda recebo esse erro.

Por exemplo, estou adicionando-o ao plugin.rb e ao lib/azure_blob_store.rb… ainda assim, esse erro.

O erro veio de uma chamada a cache_file:

/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:27:in `rescue in store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:17:in `store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:9:in `store_upload'

Alguém poderia me ensinar como resolver esse erro de dependência ausente?

Ok. Pode ser necessário na tarefa rake. Vou adicionar e ver…

EDIT: Não. Não é isso.

Está falhando em upload_creator

/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:25:in `rescue in store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:15:in `store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:7:in `store_upload'
/var/www/discourse/lib/upload_creator.rb:160:in `block (2 levels) in create_for'
/var/www/discourse/lib/upload_creator.rb:159:in `open'
/var/www/discourse/lib/upload_creator.rb:159:in `block in create_for'

Agora estou totalmente confuso. Como elimino esse erro de dependência ausente?

EDIT 2:

Por algum motivo estranho, quando clico na pequena seta no final do rastreamento de pilha, ele me leva para discourse/discourse-azure-blob-storage em vez do meu próprio fork. Tenho certeza de que estou usando meu próprio fork em app.config.

EDIT 3:

Tentei voltar uma versão para azure-storage-common 2.0.1, que não usa net-http-persistent, mas então ele usa a versão 1.10 do nokogiri, que entra em conflito com algo que requer a versão 1.11… Arrrrhhhhhgggghhhh…

Alguém sabe como resolver conflitos de versão do nokogiri?

@pfaffman você tem alguma ideia? :pray:

EDIT 4:

@maja não tenho certeza se você ainda está acompanhando este plugin. Como autor original, você pode ter uma ideia do que está acontecendo.

Tenho estado confuso com um erro há algum tempo.

Recentemente, parece que o Discourse passou a exigir a versão 1.11 do nokogiri, o que exige atualizar para a versão 2.0.1 do azure-storage-common. No entanto, essa versão usa net-http-persistent para fazer chamadas HTTP (versões anteriores não usavam).

Toda vez que uma chamada ao Azure é feita, ela falha com uma dependência ausente: missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent.

O estranho é que, mesmo se eu colocar require 'net/http/persistent' antes de cada chamada, ainda falha com exatamente o mesmo erro. Mesmo que require retorne true, indicando que o módulo foi carregado.

Parece começar a acontecer durante a segunda vez que as funções do Azure são chamadas. Para certos uploads, a primeira vez terá sucesso, mas a partir da segunda vez começará a dar erro de dependência ausente.

Parece que algo está sobrescrevendo o cache do require, apagando o net/http/persistent.

EDIT 5:

Tentei clonar azure-storage-blob e modificá-lo para remover o net-http-persistent, mas não consegui encontrar uma maneira de fazer o Discourse carregar a partir de um repositório git alternativo… parece que ele sempre está carregando o gem oficial.

EDIT 6:

Atualização: Existe uma correção que funciona razoavelmente bem. No entanto, ainda está passando por testes adicionais, pois parece entrar em conflito com outras partes.

O principal erro veio do fato de que o Faraday tem seu próprio sistema de gerenciamento de dependências, que entra em conflito com o Bundler.

A solução atual basicamente apenas ignora o erro do Faraday e carrega a dependência de forma estática. No entanto, alguma alma caridosa também pode apontar uma maneira de fazer isso de forma mais elegante…

1 curtida

Certo, este plugin está tão quebrado que não vale a pena continuar com ele.

Recomendo que todos desinstalem este plugin e usem Flexify.IO em vez disso.

2 curtidas