Rails+Sidekiq连接Mongo Atlas集群报错:Host不应包含协议
问题解决步骤
错误原因
这个错误是因为Mongoid配置中错误地将完整的Mongo Atlas SRV连接URL放到了hosts数组字段中,而hosts字段只接受不带协议的主机地址,不能包含mongodb+srv://前缀及后续参数。
修复方案
1. 修正config/mongoid.yml配置
找到你的Mongoid配置文件,将错误的hosts数组配置替换为uri字段直接传入完整连接地址:
错误配置示例:
production: clients: default: hosts: - <%= ENV['MONGO_URL'] %> database: my_database pool: 10
正确配置示例:
production: clients: default: uri: <%= ENV['MONGO_URL'] %> pool: 10 # 无需单独指定database,因为MONGO_URL中已包含数据库名称
2. 检查Sidekiq独立配置(如果有)
如果你的项目有单独的Sidekiq配置文件(比如config/sidekiq.yml),确保其中没有重复设置数据库连接的hosts字段,避免覆盖正确的uri配置。
3. 重启服务
修改配置后,重启Rails应用和Sidekiq进程,确保新配置生效。
额外说明
- 你提到生产环境正常,大概率是生产环境的Mongoid配置使用了正确的
uri写法,而当前环境误用了hosts数组。 - 增大连接池大小无法解决该问题,因为核心问题是连接地址的配置格式错误,而非连接池资源不足。
内容的提问来源于stack exchange,提问作者anand tripathi
相关产品推荐
相关产品推荐

