在这个问题上碰壁。让我解释一下我所做的事情,并展示已配置代码的片段,以期希望找到解决方案
Ruby: 2.4.0
Rails: 5.x
Gems (specific to this):
- carrierwave 1.2.3
- carrierwave-aws
这是错误
NoMethodError - undefined method `match' for nil:NilClass:
app/controllers/api/v3/video_controller.rb:23:in `upload'
这是我的config / environments / carrierwave.rb文件
CarrierWave.configure do |config|
config.storage :aws
config.aws_credentials = {
provider: "AWS",
aws_access_key_id: Rails.application.secrets.aws_access_id,
aws_secret_access_key: Rails.application.secrets.aws_access_secret,
region: "us-east-1"
}
config.aws_bucket = "{{BUCKET_NAME_HERE}}"
end
这是我的上传者
class VideoUploader < CarrierWave::Uploader::Base
storage :aws
end
最后,这是我调用上传的方式,因为它是API,所以我没有使用表单构建器或模型分配。
def upload
video = params[:video]
if video
# Send file to Amazon S3 bucket and grab URL
uploader = VideoUploader.new
uploader.store!(video.tempfile)
# uploader.retrieve_from_store!(tempfile_name)
# logger.info uploader.download_url(video.original_filename)
end
end
我已经尝试过载波+雾,雾-aws。当我删除S3公式时,文件将存储在本地(开发机器)。我尽力尝试lib / hacks,降级版本。我希望它是一个简单的监督,但是没有想法。
非常感谢您的帮助!
答案 0 :(得分:0)
已修复!。问题非常愚蠢,我希望我能早点找到它。初始化程序文件位于环境目录中(我什至在问题中列出了它!),而不是初始化程序目录……不要空腹地编写代码。
如果代码可以检测到丢失的文件,那就好了……但至少已经解决了。