You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails Shopify应用部署正常但控制器访问报T.must TypeError错误

问题排查与解决思路

核心错误分析

从日志能提取两个关键线索:

  • Shop Not Found:会话中推导的店铺test-rssfeed.myshopify.com在数据库中找不到对应记录
  • TypeError (Passed nil into T.must):shopify_api的host_scheme方法调用T.must时传入了nil,本质是Shopify Context未正确初始化,缺少必要的主机配置项

具体排查步骤

1. 验证店铺记录与会话关联

  • 检查数据库中是否存在test-rssfeed.myshopify.com对应的店铺记录:
    • 若不存在,重新完成应用授权安装流程,确保店铺信息正常写入数据库
    • 核对会话中存储的店铺域名,确认没有拼写错误或大小写问题(Shopify店铺域名统一为小写)

2. 检查Shopify Context初始化配置

shopify_api v14+强制要求正确初始化Context,重点确认host参数。查看你的初始化文件(一般在config/initializers/shopify_api.rb):

ShopifyAPI::Context.setup(
  api_key: ENV["SHOPIFY_API_KEY"],
  api_secret_key: ENV["SHOPIFY_API_SECRET"],
  api_version: "2024-01",
  host: ENV["SHOPIFY_APP_HOST"], # 此处绝对不能为nil,必须是应用完整HTTPS域名(如https://your-app-domain.com)
  is_embedded: true,
  session_storage: ShopifyAPI::SessionStorage::ActiveRecord.new
)
  • 确认SHOPIFY_APP_HOST环境变量已正确配置,值为带HTTPS前缀的完整域名(Shopify嵌入式应用要求强制HTTPS)
  • 若用Heroku等平台部署,通过平台命令验证环境变量是否生效,比如heroku config:get SHOPIFY_APP_HOST

3. 排查会话处理逻辑

版本更新后可能改动了会话获取逻辑:

  • 确保控制器中使用shopify_app gem提供的current_shop或current_session方法正确获取当前店铺会话
  • 若自定义了会话存储逻辑,检查是否在会话中正确存储并读取店铺域名、access token等关键信息

4. 临时调试定位nil来源

可以在报错上下文添加调试代码,精准定位传入T.must的nil值:
在控制器或初始化代码中临时加入:

# 调试用代码,部署后查看日志输出
puts "Shopify Context host: #{ShopifyAPI::Context.host.inspect}"
puts "Current shop domain: #{current_shop&.shopify_domain.inspect}"

根据日志输出确认哪个值为nil,再针对性修复

常见坑点提醒

  • 版本更新后,shopify_api或shopify_app gem的Context初始化规则变更,旧配置不再兼容
  • 部署时环境变量未同步,导致host参数为nil
  • 店铺记录被意外删除,但会话仍保留旧的店铺域名信息

内容的提问来源于stack exchange,提问作者Artur Bobinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:02:50