首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >carrierwave-aws: Rails API应用程序文件上载失败,原因是nil:NilClass的NoMethodError未定义方法‘`match’

carrierwave-aws: Rails API应用程序文件上载失败,原因是nil:NilClass的NoMethodError未定义方法‘`match’
EN

Stack Overflow用户
提问于 2018-07-13 05:27:36
回答 1查看 302关注 0票数 0

在这个问题上碰壁了。让我解释一下我做了什么,并展示配置代码的片段,希望能找到解决方案

代码语言:javascript
复制
Ruby: 2.4.0
Rails: 5.x
Gems (specific to this): 
 - carrierwave 1.2.3
 - carrierwave-aws

下面是错误

代码语言:javascript
复制
NoMethodError - undefined method `match' for nil:NilClass:
  app/controllers/api/v3/video_controller.rb:23:in `upload'

下面是我的config/environment/carrierwave.rb文件

代码语言:javascript
复制
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

这是我的上传工具

代码语言:javascript
复制
class VideoUploader < CarrierWave::Uploader::Base
  storage :aws
end

最后,下面是我调用upload的方法,因为它是一个API,所以我没有使用表单构建器或模型赋值。

代码语言:javascript
复制
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

我试过carrierwave + fog,fog-aws。当我删除S3等式时,该文件将存储在本地(开发机器)。我在尝试lib/ hacks,降级版本时束手无策。我希望这是一个简单的疏忽,但我没有想法。

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2018-07-13 08:33:32

修复了!这个问题非常愚蠢,我真希望我能早点发现它。初始化程序文件在环境目录中(我甚至在我的问题中列出了它!),而不是初始化程序目录……不要空腹编写代码。

如果代码能检测到丢失的文件那就太好了。但至少它已经解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51314722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档