carrierwave-aws:Rails API应用程序文件上传失败,并出现NoMethodError-未定义的方法`match'对于nil:NilClass

时间:2018-07-12 21:27:36

标签: aws-sdk carrierwave

在这个问题上碰壁。让我解释一下我所做的事情,并展示已配置代码的片段,以期希望找到解决方案

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,降级版本。我希望它是一个简单的监督,但是没有想法。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

已修复!。问题非常愚蠢,我希望我能早点找到它。初始化程序文件位于环境目录中(我什至在问题中列出了它!),而不是初始化程序目录……不要空腹地编写代码。

如果代码可以检测到丢失的文件,那就好了……但至少已经解决了。