Rails + Carrierwave + Microsoft Azure中的ArgumentError(必须提供签名密钥)

时间:2019-02-23 04:24:00

标签: ruby-on-rails ruby azure heroku carrierwave

我一直在进行一些编码练习,我需要知道如何为我的应用程序提供必要的凭据,以便建立与Microsoft Azure的连接并在使用Heroku在生产环境中运行的应用程序中上传图像。

我正在使用CarrierWave gem,如Rails教程所示,是在生产中上传图像。我使用的是Microsoft Azure而不是AWS,我的carrier_wave.rb的结构如下:

if Rails.env.production?
    require 'azure/storage/blob'

    blob_client = Azure::Blob::BlobService.

    CarrierWave.configure do |config|
        blob_client = Azure::Storage::Blob::BlobService.create(
            storage_account_name: my_account_name,
            storage_access_key: my_account_key
        )
    end
end

但是当我按下Heroku并尝试在我的应用中上传图片时,它就会崩溃

此处的日志:

2019-02-23T04:01:46.917324+00:00 app[web.1]: D, [2019-02-23T04:01:46.917249 #10] DEBUG -- : [d1de016d-29a7-4338-b6f0-071aced60e70]    (0.6ms)  ROLLBACK
2019-02-23T04:01:46.917957+00:00 app[web.1]: I, [2019-02-23T04:01:46.917872 #10]  INFO -- : [d1de016d-29a7-4338-b6f0-071aced60e70] Completed 500 Internal Server Error in 112ms (ActiveRecord: 5.2ms)
2019-02-23T04:01:46.918790+00:00 app[web.1]: F, [2019-02-23T04:01:46.918718 #10] FATAL -- : [d1de016d-29a7-4338-b6f0-071aced60e70]
2019-02-23T04:01:46.918843+00:00 app[web.1]: F, [2019-02-23T04:01:46.918781 #10] FATAL -- : [d1de016d-29a7-4338-b6f0-071aced60e70] ArgumentError (Signing key must be provided):
2019-02-23T04:01:46.918891+00:00 app[web.1]: F, [2019-02-23T04:01:46.918837 #10] FATAL -- : [d1de016d-29a7-4338-b6f0-071aced60e70]
2019-02-23T04:01:46.918942+00:00 app[web.1]: F, [2019-02-23T04:01:46.918891 #10] FATAL -- : [d1de016d-29a7-4338-b6f0-071aced60e70] app/controllers/books_controller.rb:22:in `create'

我遵循了一些示例,这些示例说明了如何从Microsoft Docs提供所需的信息,但是看来我没有正确地进行集成。感谢您在此问题上的帮助。

1 个答案:

答案 0 :(得分:0)

您从哪里得到my_account_namemy_account_key?您确定有效且有价值吗?

根据BlobService#initialize-> SharedKey#initialize-> Signer#initialize

您的acces_keynil

# Initialize the Signer.
#
# @param access_key [String] The access_key encoded in Base64.
def initialize(access_key)
  if access_key.nil?
    raise ArgumentError, 'Signing key must be provided'
  end

  @access_key = Base64.strict_decode64(access_key)
end