我正在使用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上载的。)如何解决该问题?