CarrierWave:NoMethodError(nil:NilClass的未定义方法“ body”):

时间:2019-03-26 20:32:28

标签: ruby-on-rails carrierwave

我正在使用CarrierWave在本地开发和测试环境的硬盘存储与暂存和生产环境的AWS S3存储之间进行抽象。但是,我遇到了问题: 当我尝试下载存储在S3中的文件时,

uploader = Uploader.new
uploader.retrieve_from_store!(file_path)
file = uploader.file.read

CarrierWave引发异常:

NoMethodError (undefined method `body' for nil:NilClass):

在调用上面的read方法时会发生这种情况。如果我尝试直接通过AWS的库加载文件,则文件下载成功:

Aws::S3::Bucket.new(config.s3_bucket_name,
                        client: Aws::S3::Client.new(
                            access_key_id: config.s3_key_id,
                            secret_access_key: Rails.application.secrets.s3_key_secret,
                            region: config.s3_region,
                        )
).object(file_path).get().body

使用CarrierWave进行的其他下载成功-它们在与模型关联的意义上有所不同,而在这里,我尝试从S3下载独立文件。 (如果没有任何区别,此文件最初也不是通过CarrierWave上载的。)如何解决该问题?

0 个答案:

没有答案