Rails 6.1.3自定义存储场景下active_storage直传触发nil:NilClass无name方法报错
Active Storage直传500错误问题记录
问题背景
最初在基于S3存储的自有项目中遇到Active Storage相关异常,为排查问题搭建了基于本地磁盘存储的最小复现项目,复现步骤已写入项目README,在该测试项目中也复现出了完全相同的错误。
测试环境
- Rails 6.1.3
复现操作流程
- 新建集成PostgreSQL、不生成测试用例的Rails项目,安装Active Storage组件,生成带
title、body字段的Post模型,完成数据库创建与迁移; - 在
config/storage.yml中配置public、private两个独立的磁盘存储服务; - 在Post模型中通过
has_one_attached为public_image、private_image两个附件分别显式绑定public、private存储服务; - 注释掉development环境中的默认Active Storage服务配置,采用每次声明附件时显式指定服务名的方式管理附件;
- 在Post表单中添加两个文件上传字段,在Post详情页添加附件展示逻辑,此时普通上传流程运行正常,
active_storage_blobs表中新增记录的service_name字段值准确,仅存在配置为公共访问的附件本应无需重定向却触发重定向的小问题; - 为两个文件上传字段开启
direct_upload: true的直传配置,尝试新增带附件的Post记录时,服务在处理指向/rails/active_storage/direct_uploads的POST请求时返回500内部错误,触发NoMethodError:nil:NilClass对象不存在name方法,错误堆栈定位到activestorage 6.1.3版本的blob.rb代码文件。
当前诉求
希望获得该问题的排查指导,明确问题触发原因与对应的解决方法。
内容的提问来源于stack exchange,提问作者holmes
相关产品推荐
相关产品推荐

