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

如何将Ecto连接到CockroachDB Serverless并正确配置连接字符串

解决方案

导致报错的核心原因是Ecto生成的连接参数中没有携带CockroachDB Serverless要求的集群标识,你可以选择以下任意一种方式配置:

方式1:直接配置完整连接字符串

你可以直接把CockroachDB控制台拿到的完整连接串赋值给Ecto Repo配置的url字段,无需拆分配置:

# 对应环境的config配置文件
config :your_app_name, YourAppName.Repo,
  url: "postgresql://username:你的密码@free-tier.gcp-us-central1.cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=#{System.expand_path("~/.postgresql/root.crt")}&options=--cluster%3D你的实际集群名"

注意:如果连接串中的密码包含特殊字符,需要提前做URL编码后再填入。

方式2:拆分配置项(更适合多环境变量管理场景)

如果需要分开管理用户名、密码、集群名等参数,可以用拆分配置的方式,把集群名放到parameters的options字段下即可:

# 对应环境的config配置文件
config :your_app_name, YourAppName.Repo,
  username: System.get_env("COCKROACH_USER", "默认用户名"),
  password: System.get_env("COCKROACH_PASSWORD", "默认密码"),
  hostname: "free-tier.gcp-us-central1.cockroachlabs.cloud",
  port: 26257,
  database: System.get_env("COCKROACH_DB", "defaultdb"),
  # SSL配置对应官方要求的verify-full模式
  ssl: true,
  ssl_opts: [
    verify: :verify_peer,
    cacertfile: System.get_env("COCKROACH_CERT_PATH", System.expand_path("~/.postgresql/root.crt"))
  ],
  # 此处填写你的实际集群名,会自动添加到连接参数中
  parameters: [
    options: "--cluster=你的实际集群名"
  ]

注意事项

  • 两种配置方式二选一即可,无需同时配置url和拆分参数
  • 集群名可在CockroachDB Serverless控制台的连接信息页面获取,不要使用示例中的测试集群名
  • 生产环境所有敏感配置请通过环境变量读取,不要硬编码到配置文件中

内容的提问来源于stack exchange,提问作者Jordan Lewis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:18:02