Azure Blob Storage プラグイン

昨日インストールしました。まだ試しに使っている最中ですが、概ね問題なく動いているようです。

こんにちは

プラグインを使ってみています。一部の機能は正常に動作しています。例えば、ウェブサイトのロゴを追加すると、Azure Blob ストレージに保存されます。

しかし

投稿に画像をアップロードすると、画像が表示されません。以下のような状態です:

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

何か原因がわかりませんか?プラグインは正常に動作していますか?

ご回答ありがとうございます。

v2.7.0 beta1 にこのプラグインをインストールしようとしましたが、以下のエラーが発生しました。上記の faraday 問題に似ていますが、今回は 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>'

編集:バージョン d6121249d3856a40382637ed12db50fc43c1fb1d (2.6.0) では正常に動作しました。

「いいね!」 1

v2.7.0beta1 へのアップグレード後、同様のエラーが発生しました。このプラグインを最新リリースで動作するように更新することは可能ですか?

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

#plugin:broken-plugin カテゴリに分類されているため、現在は動作していません。また、これを復旧させることに興味を持っている人は見当たりません。

「いいね!」 2

それは悲しい話ですね。:frowning:

今日は再構築を試みた際にのみこのエラーが発生しました。

本質的には、azure-storage-common gem の依存関係の 1 つが Discourse と競合するため、バージョンを上げる必要があります。

待てない方のために(Azure Blob が突然機能しなくなると、サイトが復旧しなかったり、すべてのコンテンツが失われたりする可能性があるため、そのお気持ちはよくわかります)、代わりに私のフォークから取得してください。

以前ほど meta を頻繁にチェックしていないため、これらのメッセージに気づくのが数ヶ月後になるかもしれません。お困りの場合は、私の GitHub リポジトリで issue を作成してください。必ず返信します。

「いいね!」 2

PR がすぐにマージされ、broken-plugin タグが削除されることを願っています。

この現象は、通常はポストプロセッシング中のエラーです。

Azure へのアップロードを妨げている原因を確認するには、sidekiq のログを確認してください。

今日はアプリを再ビルドした際に Unicorn エラーが発生しました:

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

明日はさらに詳しく調べてみますが、上記のアップデートではこの問題は解決されていないようです。

@schungx

エラーは、プライベート IP 範囲を使用していることを指摘しているようです。

「いいね!」 1

もしかすると私の認識が間違っているかもしれませんが、これは定数 PRIVATE_RANGES が初期化されていないことを示唆しています。その定数は以下の場所で定義されているはずです。

上記の utility.rb で定義されている IPAddr クラスと、Discourse 自体で定義されている IPAddr クラスとの間で名前衝突が起きているのかどうかは確信が持てませんが、それが最初の懸念事項です。その修正をどう進めればよいのかは現時点ではわかりません。私の最初の考えは、Discourse 内の IPAddr クラスをモジュール内に配置する PR を提出することです。さらに何かご意見はありますか?

エラーメッセージでは 218 行目とされていますが、private? の呼び出しは 221 行目のようです。

そのため、バージョンが間違っている可能性があります。

218 行目が意味をなす最後のバージョンは 1.1.0 です。実際のエラー位置は以下の通りです。

OK、本当に困っています。プラグインがまだ正しくないようです。

ファイルの保存を試みるたびに、以下のエラーが表示されます:

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

明らかにどこかで require 'net/http/persistent' が不足しているのですが、至る所に追加してもこのエラーが消えません。

例えば、plugin.rblib/azure_blob_store.rb に追加しても、まだエラーが発生します。

このエラーは 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'

親切な方、この「依存関係が見つからない」エラーを解消する方法を教えていただけないでしょうか?

はい、rake タスクで必要になるかもしれません。追加して試してみます…

編集:いいえ、それではありません。

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'

今、完全に途方に暮れています。その依存関係不足のエラーをどうすれば解消できますか?

編集 2:

不思議なことに、スタックトレースの末尾にある小さな矢印をクリックすると、自分のフォークではなく discourse/discourse-azure-blob-storage に移動してしまいます。app.config で自分のフォークを使用していることは確信しています。

編集 3:

net-http-persistent を使用しない azure-storage-common 2.0.1 にバージョンを戻してみましたが、今度は nokogiri のバージョン 1.10 を使用することになり、バージョン 1.11 を必要とする 何か と競合してしまいます… ありゃああああああ…

nokogiri のバージョン競合を解決する方法をご存知の方がいますか?

@pfaffman 何かアイデアはありますか?:pray:

編集 4:

@maja 引き続きこのプラグインについてフォローしてくださっているかどうかわかりませんが、オリジナルの作者として何か状況がわかるかもしれません。

しばらくの間、あるエラーに頭を悩ませています。

最近、Discourse が nokogiri バージョン 1.11 を必要とするようになり、それには azure-storage-common バージョン 2.0.1 への更新が必須となりました。しかし、そのバージョンは HTTP 呼び出しに net-http-persistent を使用しています(以前のバージョンでは使用していませんでした)。

Azure への呼び出しを行うたびに、依存関係不足のエラーが発生します:missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent

奇妙なことに、呼び出しの直前に毎回 require 'net/http/persistent' を追加しても、同じエラーが発生し続けます。require はモジュールが読み込まれたことを示す true を返しているにもかかわらずです。

どうやら、Azure 関数を 2 回目に呼び出すタイミングから問題が始まるようです。特定のアップロードでは、1 回目は成功しますが、2 回目以降から依存関係不足のエラーが発生し始めます。

まるで何かが require キャッシュを上書きして net/http/persistent を消去しているかのようです。

編集 5:

azure-storage-blob をクローンして net-http-persistent を削除するように修正してみましたが、Discourse に代替の git リポジトリから読み込ませる方法が見つかりません… 常に公式の gem が読み込まれているようです。

編集 6:

更新:実用的な修正が見つかりました。ただし、他の場所と競合しているようなので、さらなるテスト中です。

主なエラーの原因は、Faraday が独自に依存関係管理システムを持っており、Bundler と競合していたことです。

現在の解決策は、基本的には Faraday からのエラーを無視して、依存関係を静的に読み込むというものです。しかし、よりエレガントな方法をご存知の方がいれば、ぜひ教えていただきたいところです…

「いいね!」 1

このプラグインはあまりに不具合が多いため、継続する意味がありません。

皆さんには、このプラグインをアンインストールし、代わりに Flexify.IO を使用することをお勧めします。

「いいね!」 2