Rails项目Site查询在本地测试返回nil 服务器及控制台运行正常
问题根因
- 你的控制台运行在Rails开发环境,操作的是开发数据库,你手动创建的
host=www.example.com的Site记录仅存在于开发库。Rails测试用例运行在独立的测试环境,使用单独的测试数据库,默认每次执行前会清空数据、仅加载你配置的fixture内容,开发库的记录不会同步到测试库。 - 你配置的fixture中,
thirty_one站点的host值为example.com,但你控制器逻辑拼接出的查询值为www.example.com,两者不匹配,自然查询返回nil。 - 日志中的CACHE记录是Rails查询缓存的正常表现,同一个查询第二次调用时直接读取缓存,不是导致结果为空的原因。
修复方案
- 调整fixture配置,将host改为测试需要的
www.example.com:
thirty_one: id: 31 shop_id: 31 host: "www.example.com"
- (可选)如果业务逻辑允许不带www的域名访问,可在测试请求时指定Host头适配现有fixture:
get user_acqs_path, headers: { "Host" => "example.com" }
- 执行命令确保测试数据库结构和fixture已正确加载:
rails db:test:prepare
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

