【问题标题】:NameError (uninitialized constant Aws::VERSION):NameError(未初始化的常量 Aws::VERSION):
【发布时间】:2018-02-19 08:09:31
【问题描述】:

我正在RAILS 5 中将回形针与 S3 存储桶集成。我指的是https://coderwall.com/p/vv1iwg/set-up-ruby-on-rails-with-paperclip-5-and-s3-using-aws-sdk-v2。 我在 development.rb 中写了以下内容:

  config.paperclip_defaults = {
    storage: :s3,
    s3_region: 'us-west-2',
    s3_credentials: {
      bucket: 'mybucket',
      access_key_id: 'my id',
      secret_access_key: 'my secret key'
      }
    } 

上传图片时出现以下错误:

NameError (uninitialized constant Aws::VERSION):

我使用的是 gem aws-sdk 的 3.0.1 版

【问题讨论】:

  • @AjayBarot:凭据将在字符串中。我还尝试为凭据创建一个 yml 文件并加载它,但没有运气
  • 查看aws-sdk的版本。如果它的 则说明错误。
  • 我正在使用最新版本,即 aws-sdk (3.0.1)

标签: ruby-on-rails amazon-s3 paperclip


【解决方案1】:

您可以引入当前版本中回形针缺少的变量,而不是降级。添加此文件适用于 aws-sdk 3.0.1 和回形针 5.1.0,并且可能会在更新回形针以适应 aws 更改之前工作。

# config/initializers/aws.rb
Aws::VERSION =  Gem.loaded_specs["aws-sdk"].version

【讨论】:

  • 这是一个比使用旧版本 aws-sdk 更好的解决方案,非常适合我使用 Paperclip 5.1
【解决方案2】:

我已将 aws-sdk 版本降级为 aws-sdk (2.10.42) 并且可以正常工作。

【讨论】:

  • 这里也一样,好像是aws-sdk 3.x的bug。
  • aws-sdk 3.x 删除了此常量,但当前版本 5.1.0 中的 paperclip 依赖于此常量,这就是它崩溃的原因。 gem 'aws-sdk', '~> 2.10.47' 为您提供最新的 2.x 版本,可以很好地与回形针配合使用。
  • 这适用于 Paperclip 5.1,但 Peter DeWeese 的回答也适用,并且是一个更好的解决方法,允许您使用当前的 aws-sdk
【解决方案3】:

这是我对CarrierWaveminimagick 的配置,我认为可以为您的情况做类似的事情:

config/initializers/carrier_wave.rb

CarrierWave.configure do |config|       
     config.fog_credentials = {     
         provider:              'AWS',      
         aws_access_key_id:     ENV['S3_ACCESS_KEY'],       
         aws_secret_access_key: ENV['S3_SECRET_KEY'],       
         region:                ENV['S3_REGION']        
     }      
     config.fog_directory     =  ENV['S3_BUCKET']       
 end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2015-10-29
    相关资源
    最近更新 更多