名称错误(未初始化常量Aws :: VERSION)

4
我正在将S3桶与RAILS 5中的paperclip集成。 我正在参考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):

我正在使用版本为3.0.1的gem aws-sdk

@AjayBarot:凭据将以字符串形式存在。我还尝试创建了一个用于凭据的yml文件并加载它,但没有成功。 - Chakreshwar Sharma
检查 aws-sdk 的版本。如果版本号小于 2.0,那么这就解释了错误的原因。 - Pavan
我正在使用最新版本的aws-sdk(3.0.1)。 - Chakreshwar Sharma
3个回答

7

不要降级,你可以引入当前版本中缺失的变量。添加此文件可与aws-sdk 3.0.1和paperclip 5.1.0配合使用,并且在paperclip更新以适应aws更改之前可能有效。

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

这是比使用旧版本的aws-sdk更好的解决方案,对我来说在Paperclip 5.1上运行得很好。 - Polsonby

3

我已经将 aws-sdk 版本降级到 aws-sdk(2.10.42),现在它可以正常工作。


同样的问题,看起来这是一个aws-sdk 3.x的bug。 - Lucas Caton
3
aws-sdk 3.x 移除了这个常量,但是 paperclip 在当前版本的 5.1.0 中仍然依赖于这个常量,所以会导致崩溃。使用 gem 'aws-sdk', '~> 2.10.47' 可以获取最新的 2.x 版本,它可以正常地与 paperclip 配合使用。 - Sven R.
这适用于Paperclip 5.1,但Peter DeWeese的答案也可以工作,并且是一种更好的解决方法,允许您使用当前的aws-sdk。 - Polsonby

0

这是我的CarrierWave配置,使用了minimagick,我认为你的情况也可以类似地处理:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接