我昨天刚安装的。我还在摸索中,但看起来功能总体正常。
你好
我正在尝试使用您的插件……部分功能正常。例如,我可以添加我的网站标志,它已成功上传到 Azure Blob 存储。
但是
当我在帖子中上传图片时,图片无法显示。我看到的代码如下:
引用

您有什么建议吗?您的插件是否仍在正常工作?
感谢您的回复
我刚刚在 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)时运行正常。
升级至 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 类别下,因此目前无法使用,而且似乎没有人有兴趣将其恢复正常运行。
真是个令人难过的故事。![]()
今天尝试重新构建时只遇到了这个错误。
本质上,azure-storage-common gem 需要升级版本,因为它的某个依赖项现在与 Discourse 存在冲突。
对于无法等待的用户(我理解这种心情,因为如果 Azure Blob 突然无法使用,您的站点可能无法恢复,或者会丢失所有内容),请改从我的 fork 拉取代码:
我不再像以前那样频繁关注 meta 论坛,因此可能要过几个月才能看到这些消息。如有需要,请在我的 GitHub 仓库中提出问题,我会尽快回复。
希望该 PR 很快会被合并,broken-plugin 标签也可以随之移除。
出现这种情况时,通常是在后处理过程中发生了错误。
请检查您的 sidekiq 日志,以查明是什么阻碍了您上传到 Azure。
今天重建应用时遇到了 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>'
我明天会再仔细查看一下,但上面的更新似乎并没有解决这个问题。
这个错误似乎是在抱怨你正在使用私有 IP 地址范围?
也许我错了,但这表明常量 PRIVATE_RANGES 未初始化。该常量应在此处定义:
我不确定这是否是上述 utility.rb 中定义的 IPAddr 类与 Discourse 自身定义的 IPAddr 类之间的命名冲突,但这将是我首要关注的点。我只是不确定该如何着手修复。我的第一个想法是提交一个 PR,将 Discourse 中的 IPAddr 类放入一个模块中。还有其他想法吗?
看起来 private? 调用位于第 221 行,而不是错误消息中提到的第 218 行。
因此,这是否可能是版本错误?
第 218 行有意义的最后一个版本是 1.1.0,您可以在该版本中看到确切的错误位置:
好的,我真的很困惑。原来这个插件仍然不正确。
每当它尝试存储文件时,就会返回以下错误:
无法存储 Blob:缺少 Faraday::Adapter::NetHttpPersistent 的依赖项:无法加载文件 -- net/http/persistent
Url: //chenhsongweb.blob.core.windows.net/support/original/2X/e/e5224c77df15646017fb5e4747576206c33904f6.jpeg
显然,我在某处遗漏了 require 'net/http/persistent',但我尝试将其添加到“所有地方”,错误仍然存在。
例如,我将其添加到了 plugin.rb 和 lib/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 而不是我自己的 fork。我非常确定我在 app.config 中正在使用我自己的 fork。
编辑 3:
我尝试回退到 azure-storage-common 的 2.0.1 版本,它不使用 net-http-persistent,但随后它使用了 nokogiri 的 1.10 版本,这与需要 1.11 版本的某个东西冲突……啊……
有人知道如何解决 nokogiri 版本冲突吗?
@pfaffman 你有什么想法吗?![]()
编辑 4:
@maja 不确定你是否还在跟进这个插件。作为原作者,你可能知道发生了什么。
我被一个错误困扰了一段时间。
最近,Discourse 似乎开始要求 nokogiri 版本 1.11,这强制要求更新到 azure-storage-common 版本 2.0.1。然而,该版本使用 net-http-persistent 进行 HTTP 调用(旧版本没有)。
每次进行 Azure 调用时,都会因缺失依赖而失败:missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent。
奇怪的是,即使我在每次调用前都加上 require 'net/http/persistent',它仍然以完全相同的错误失败。尽管 require 返回 true,意味着模块已加载。
这似乎是在第二次调用 Azure 函数时开始的。对于某些上传,第一次会成功,而从第二次开始就会报缺失依赖。
这感觉就像是有什么东西覆盖了 require 缓存,清除了 net/http/persistent。
编辑 5:
尝试克隆 azure-storage-blob 并修改以移除 net-http-persistent,但找不到方法让 Discourse 从替代的 git 仓库加载……它似乎总是加载官方的 gem。
编辑 6:
更新:有一个解决方案效果尚可。不过,它仍在进一步测试中,因为它似乎与其他地方存在冲突。
主要错误源于 Faraday 拥有自己的依赖管理系统,这与 Bundler 冲突。
目前的解决方案基本上只是忽略 Faraday 的错误并静态加载依赖。不过,也许会有好心人指出一种更优雅的做法……
好吧,这个插件问题太多,继续下去毫无意义。
我建议大家卸载该插件,改用 Flexify.IO。