部署Medusa.js时Redis与Railway后端连接失败及BullMQ报错问题
解决Medusa.js部署时Redis连接与BullMQ错误问题
核心问题分析
你遇到的getaddrinfo ENOTFOUND redis.railway.internal是DNS解析失败,说明应用无法识别Redis实例的私有域名。尽管日志显示redis、event-bus-redis、redis-cache已建立连接,但BullMQ的报错(来自JobSchedulerService)表明Medusa的任务调度模块未正确复用Redis连接配置。
具体解决步骤
确认Redis URL准确性
- 核对Railway控制台给出的Redis实例完整连接地址,确保
Redis.REDIS_URL变量值包含密码、端口等完整信息,格式示例:redis://default:your_password@redis.railway.internal:6379 - 先不手动拼接
family参数,直接使用原始URL测试,部分平台Redis实例不支持强制指定IP版本
- 核对Railway控制台给出的Redis实例完整连接地址,确保
显式配置BullMQ的Redis连接
由于Medusa的event-bus-redis和任务调度默认复用全局Redis配置,但可能存在配置传递失效问题,直接在medusa-config.js中指定BullMQ的Redis选项:module.exports = { // 其他原有配置... redis_url: process.env.Redis.REDIS_URL, event_bus: { resolve: "@medusajs/event-bus-redis", options: { redisUrl: process.env.Redis.REDIS_URL, redisOptions: { family: 4, // 强制使用IPv4,部分平台私有网络仅支持该版本 retryDelayOnFailover: 100, enableReadyCheck: true, maxRetriesPerRequest: 3, }, }, }, jobScheduler: { options: { redis: { connection: process.env.Redis.REDIS_URL, options: { family: 4, enableReadyCheck: true, }, }, }, }, };验证私有网络连通性
- 确认Medusa应用所在的Railway服务已启用私有网络,且Redis实例与应用处于同一私有网络环境
- 在应用容器内执行
nslookup redis.railway.internal测试DNS解析,若仍失败,联系Railway支持确认私有网络配置
检查依赖版本兼容性
- 核对
@medusajs/medusa、@medusajs/event-bus-redis、bullmq的版本匹配度,建议使用Medusa官方推荐的版本组合,避免版本冲突导致连接异常
- 核对
额外排查点
- 查看Railway的Redis实例日志,确认是否存在连接拒绝或认证失败记录,排除密码错误或实例未启动问题
- 检查应用环境变量加载情况,确保
Redis.REDIS_URL无拼写错误(如大小写问题)
内容的提问来源于stack exchange,提问作者Kareem Abbas
相关产品推荐
相关产品推荐

