Plugin per Azure Blob Storage

L’ho installato ieri. Sto ancora esplorandolo, ma sembra generalmente funzionante.

Ciao,

Sto provando a utilizzare il tuo plugin… Alcune funzionalità funzionano correttamente. Ad esempio, riesco ad aggiungere il logo del mio sito e viene caricato nel mio storage Azure Blob.

Ma

Quando carico un’immagine in un post, l’immagine non viene visualizzata. Ho questo:

Citazione ![quete-viking-coin-master|362x500](upload://tBpGuefbyQNcVbDgJzOyv32uxFX.jpeg)

Hai qualche idea? Il tuo plugin funziona ancora correttamente?

Grazie per la risposta

Ho appena provato a installare questo plugin sulla versione v2.7.0 beta1 e ho ricevuto questo errore, che sembra simile al problema di faraday menzionato sopra, ma riguarda 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: Impossibile attivare azure-storage-common-2.0.1, perché nokogiri-1.11.1-x86_64-linux è in conflitto con 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: Funziona correttamente con la versione: d6121249d3856a40382637ed12db50fc43c1fb1d (2.6.0)

1 Mi Piace

Sto ricevendo anche questo errore dopo l’aggiornamento alla versione v2.7.0beta1. È possibile aggiornare questo plugin per farlo funzionare con l’ultima release?

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: Impossibile attivare azure-storage-common-2.0.1, perché nokogiri-1.11.1-x86_64-linux è in conflitto con 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>'

È classificato nella categoria #plugin:broken-plugin, quindi al momento non funziona e sembra che non ci sia nessuno interessato a riportarlo in funzione.

2 Mi Piace

È una storia triste. :frowning:

Ho ottenuto questo errore solo oggi quando ho provato a ricostruire.

In sostanza, il gem azure-storage-common deve aggiornare la versione perché una delle sue dipendenze ora entra in conflitto con Discourse.

Per chi non può aspettare (capisco il vostro sentimento, perché se Azure Blob smette improvvisamente di funzionare, il vostro sito non si riavvierà o perderà tutti i contenuti), usate invece il mio fork:

Non monitoro più meta come facevo prima, quindi potrei non vedere questi messaggi fino a mesi dopo. Per chi ha bisogno, create un issue nel mio repository GitHub e dovrei rispondere.

2 Mi Piace

Speriamo che la PR venga unita presto e che il tag broken-plugin possa essere rimosso.

Quando ciò accade, si tratta solitamente di errori durante l’elaborazione successiva.

Controlla i log di sidekiq per verificare cosa ti impedisce di caricare i dati su Azure.

Ho ricevuto un errore Unicorn oggi mentre ricompilavo la mia app:

E, [2021-03-29T01:34:52.651460 #756] ERROR -- : app error: uninitialized constant IPAddr::PRIVATE_RANGES (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>'

Ne darò un’occhiata più approfondita domani, ma l’aggiornamento sopra non sembra risolvere il problema.

@schungx

Sembra che l’errore lamenti l’uso di un intervallo di indirizzi IP privati?

1 Mi Piace

Forse mi sbaglio, ma questo suggerisce che la costante PRIVATE_RANGES non è inizializzata. Tale costante dovrebbe essere definita qui:

Non sono sicuro se si tratti di un conflitto di nomi tra la classe IPAddr definita nel suddetto utility.rb e quella definita nello stesso Discourse, ma questa sarebbe la mia prima preoccupazione. Non sono sicuro di come procedere per risolvere il problema. La mia prima idea sarebbe quella di inviare una PR che collochi la classe IPAddr di Discourse all’interno di un modulo. Qualche altro pensiero?

Sembra che la chiamata private? sia sulla riga 221, invece che sulla riga 218 come indicato nel messaggio di errore.

Quindi forse si tratta della versione sbagliata?

L’ultima versione in cui la riga 218 ha senso è la 1.1.0, dove si può vedere che corrisponde esattamente alla posizione dell’errore:

OK, sono davvero perplesso. A quanto pare, il plugin non è ancora corretto.

Ogni volta che tenta di memorizzare un file, restituisce:

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

Quindi, è ovvio che da qualche parte mi stia sfuggendo un require 'net/http/persistent', ma ho provato ad aggiungerlo ovunque e l’errore persiste.

Ad esempio, l’ho aggiunto in plugin.rb e in lib/azure_blob_store.rb… eppure l’errore rimane.

L’errore è stato generato da una chiamata 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'

Qualcuno di gentile potrebbe spiegarmi come risolvere l’errore di dipendenza mancante?

Ok. Potrebbe essere necessario nel task rake. Lo aggiungo e vediamo…

EDIT: No. Non è quello.

Il problema si verifica in 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'

Ora sono completamente perplesso. Come posso eliminare quell’errore di dipendenza mancante?

EDIT 2:

Per qualche strano motivo, quando clicco sulla freccetta alla fine dello stack trace, mi reindirizza a discourse/discourse-azure-blob-storage invece che al mio fork. Sono quasi certo di stare usando il mio fork in app.config.

EDIT 3:

Ho provato a tornare indietro di una versione a azure-storage-common 2.0.1, che non utilizza net-http-persistent, ma poi richiede nokogiri versione 1.10, che entra in conflitto con qualcosa che richiede la versione 1.11… Arrrrhhhhhgggghhhh…

Qualcuno sa come risolvere i conflitti di versione di nokogiri?

@pfaffman hai qualche idea? :pray:

EDIT 4:

@maja non sono sicuro se stai ancora seguendo questo plugin. Come autore originale potresti avere un’idea di cosa stia succedendo.

Sono perplesso da un errore da un po’ di tempo.

Recentemente sembra che Discourse richieda la versione 1.11 di nokogiri, il che impone l’aggiornamento a azure-storage-common versione 2.0.1. Tuttavia, quella versione utilizza net-http-persistent per effettuare chiamate HTTP (le versioni precedenti non lo facevano).

Ogni volta che viene effettuata una chiamata ad Azure, fallisce con un errore di dipendenza mancante: missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent.

La cosa strana è che, anche se inserisco require 'net/http/persistent' ogni volta prima della chiamata, continua a fallire con lo stesso identico errore. Anche se require restituisce true, indicando che il modulo è stato caricato.

Sembra che il problema inizi a manifestarsi durante la seconda chiamata alle funzioni di Azure. Per alcuni upload, la prima volta ha successo, ma dalla seconda in poi inizia a dare errore di dipendenza mancante.

È come se qualcosa stesse sovrascrivendo la cache di require, cancellando net/http/persistent.

EDIT 5:

Ho provato a clonare azure-storage-blob e modificarlo per rimuovere net-http-persistent, ma non riesco a trovare un modo per far sì che Discourse carichi da un repository Git alternativo… sembra che carichi sempre il gem ufficiale.

EDIT 6:

Aggiornamento: esiste una soluzione che funziona abbastanza bene. Tuttavia, è ancora in fase di ulteriori test poiché sembra entrare in conflitto con altre parti del sistema.

L’errore principale era dovuto al fatto che Faraday ha il proprio sistema di gestione delle dipendenze, che entra in conflitto con Bundler.

La soluzione attuale consiste semplicemente nell’ignorare l’errore da parte di Faraday e caricare la dipendenza in modo statico. Tuttavia, qualcuno gentile potrebbe anche indicare un modo per farlo in modo più elegante…

1 Mi Piace

D’accordo, questo plugin è così rotto che non ha senso continuare a usarlo.

Consiglio a tutti di disinstallare questo plugin e utilizzare Flexify.IO invece.

2 Mi Piace