我正在使用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
来删除gem,但是似乎留下了一些依赖关系。