어제 설치했어요. 아직 이것저것 테스트 중이지만, 전반적으로 잘 작동하는 것 같습니다.
안녕하세요
플러그인을 사용하려고 하는데… 일부 기능은 정상적으로 작동합니다. 예를 들어, 제 웹사이트 로고를 추가하면 Azure Blob Storage에 정상적으로 업로드됩니다.
하지만
게시물에 이미지를 업로드하면 이미지가 표시되지 않습니다. 다음과 같은 상태입니다:
인용

혹시 원인을 아시는 분 계신가요? 플러그인이 항상 정상적으로 작동합니까?
답변 주셔서 감사합니다
방금 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이 갑자기 작동하지 않으면 사이트가 다시 올라오지 않거나 모든 콘텐츠가 사라질 수 있다는 점을 이해합니다), 제 포크에서 가져가세요:
예전만큼 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 클래스 간의 이름 충돌 때문인지는 확실하지 않지만, 이것이 제 첫 번째 우려 사항입니다. 다만 이를 수정하기 위해 어떻게 진행해야 할지 모르겠습니다. 제 첫 번째 생각은 discourse의 IPAddr 클래스를 모듈 안에 넣는 PR을 제출하는 것입니다. 다른 의견이 있으신가요?
private? 호출은 에러 메시지에 나와 있는 218번째 줄이 아니라 221번째 줄에 있는 것 같습니다.
그러면 잘못된 버전일 수 있겠네요.
218번째 줄이 의미 있는 마지막 버전은 1.1.0이며, 여기서 에러 위치를 정확히 확인할 수 있습니다:
음, 정말 막막하네요. 결국 플러그인이 여전히 올바르게 설정되어 있지 않다는 걸 알게 되었습니다.
파일을 저장하려고 할 때마다 다음과 같은 메시지가 반환됩니다:
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.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로 이동합니다. app.config에서 제 포크를 사용 중인 것으로 확신합니다.
수정 3:
net-http-persistent를 사용하지 않는 azure-storage-common 2.0.1 버전으로 되돌려 보았지만, 이번에는 1.11 버전을 요구하는 _무언가_와 충돌하는 nokogiri 1.10 버전을 사용합니다… 아아아아아아…
누군가 nokogiri 버전 충돌을 해결하는 방법을 아시나요?
@pfaffman 혹시 아이디어가 있으신가요? ![]()
수정 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 함수를 _두 번째_로 호출하는 중에 시작되는 것 같습니다. 특정 업로드의 경우 첫 번째 호출은 성공하고, 두 번째 호출부터 누락된 의존성 오류가 나기 시작합니다.
require 캐시를 덮어쓰고 net/http/persistent를 지우는 것처럼 느껴집니다.
수정 5:
azure-storage-blob를 클론하고 net-http-persistent를 제거하도록 수정해 보았지만, Discourse가 대체 git 저장소에서 로드하도록 하는 방법을 찾을 수 없습니다… 항상 공식 gem을 로드하는 것 같습니다.
수정 6:
업데이트: 합리적으로 작동하는 수정안이 있습니다. 그러나 다른 곳들과 충돌하는 것 같아 추가 테스트가 진행 중입니다.
주요 오류는 Faraday가 Bundler와 충돌하는 자체 의존성 관리 시스템을 가지고 있다는 사실에서 비롯되었습니다.
현재 솔루션은 기본적으로 Faraday의 오류를 무시하고 의존성을 정적으로 로드하는 것입니다. 하지만 더 우아한 방법을 제시해 주실 친절하신 분이 계실 수도 있습니다…
음, 이 플러그인은 너무 깨져서 계속 사용할 이유가 없습니다.
모든 사용자에게 이 플러그인을 제거하고 대신 Flexify.IO를 사용하도록 권장합니다.