AWS S3集成产生未定义的方法`match'

PSC*_*ell 19 ruby-on-rails amazon-s3 paperclip

我正在使用Paperclip上传图像的简单项目.在我尝试将S3与Paperclip集成之前,一切都运行良好.在"上传"用户的图像后,我收到NoMethodError (undefined method 'match' for nil:NilClass):错误消息.这只有在我的S3配置运行时才会发生 - 如果我将文件评论完全上传.

我的配置:

development.rb:
....
....
  config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET_ID'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}
Run Code Online (Sandbox Code Playgroud)

我的型号:

 class User < ActiveRecord::Base
        has_attached_file :image_file, default_url: "/myapp/images/:style/missing.png"
        validates_attachment_file_name :image_file, matches: [/png\Z/, /jpeg\Z/, /tiff\Z/, /bmp\Z/, /jpg\Z/]
Run Code Online (Sandbox Code Playgroud)

控制台的整个错误输出:

NoMethodError (undefined method `match' for nil:NilClass):
  app/controllers/images_controller.rb:33:in `block in create'
  app/controllers/images_controller.rb:32:in `create'
Run Code Online (Sandbox Code Playgroud)

我试过的事情:

  • 我将AWS密钥和存储桶名称直接添加到代码中,而不是作为环境变量.

  • 如上所述,我在我的环境文件中注释掉了AWS配置,它似乎完美无缺.

值得一提的是,我之前安装了fog宝石以开始配置Google云端存储,但决定坚持使用S3.我曾经gem uninstall fog删除了宝石,但似乎有一些依赖关系留在后面.

rgu*_*taz 37

添加:s3_region到您的配置图:

例如

config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET_ID'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  },
  :s3_region => ENV['AWS_REGION']
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是一个v5.0.0功能(在Beta中).因此,在文档中没有任何关于它的内容.但是在实际的5.0代码中关于它的评论.

另外值得注意的是s3_permissions,papertrail 中的键现在需要一个字符串值(它用于接受符号).

:s3_permissions => 'public-read'
Run Code Online (Sandbox Code Playgroud)