我正在使用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']
}
}
我的模特:
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/]
控制台的整个错误输出:
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'
我尝试的事情:
我将AWS密钥和存储桶名称直接添加到代码中 作为环境变量。
如上所述,我在环境文件中注释掉了AWS配置,它似乎运行正常。
值得一提的是,我之前安装了fog
gem以开始配置Google Cloud Storage,但决定坚持使用S3。我使用gem uninstall fog
删除了宝石,但似乎有些依赖项留在后面。
答案 0 :(得分:35)
将:s3_region
添加到配置图:
E.g。
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']
}
不幸的是,这是一个v5.0.0功能(在Beta中)。因此,在文档中没有任何关于它的内容。但是有a comment about it in the actual 5.0 code。
另外值得注意的是,papertrail中的s3_permissions
键现在需要一个字符串值(用于接受符号)。
:s3_permissions => 'public-read'
答案 1 :(得分:3)
您需要以s3_credentials
之类的方式指定region: ENV["AWS_REGION"]
中的区域。
至于清理未使用的宝石,您可以运行bundle clean
。