Jor*_*wis 3 database elixir ecto cockroachdb cockroachcloud
我想为我的 Ecto 应用程序使用 CockroachDB Serverless。如何指定连接字符串?
我在尝试连接时收到这样的错误。
[error] GenServer #PID<0.295.0> terminating
** (Postgrex.Error) FATAL 08004 (sqlserver_rejected_establishment_of_sqlconnection) codeParamsRoutingFailed: missing cluster name in connection string
(db_connection 2.4.1) lib/db_connection/connection.ex:100: DBConnection.Connection.connect/2
Run Code Online (Sandbox Code Playgroud)
CockroachDB Serverless 表示通过在连接字符串中包含集群名称来进行连接,如下所示:
postgresql://username:<ENTER-PASSWORD>@free-tier.gcp-us-central1.cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=$HOME/.postgresql/root.crt&options=--cluster%3Dcluster-name-1234
Run Code Online (Sandbox Code Playgroud)
但我不确定如何让 Ecto 通过其配置创建此连接字符串。
问题是 Postgrex 无法解析连接 URL 中的所有信息 - 特别是 SSL 配置。解决方案是显式指定连接参数,包括cacertfileSSL 选项。假设您已将集群的 CA 证书下载到priv/certs/ca-cert.crt,您可以使用以下配置作为模板:
config :my_app, MyApp.Repo,
username: "my_user",
password: "my_password",
database: "defaultdb",
hostname: "free-tier.gcp-us-central1.cockroachlabs.cloud",
port: "26257",
ssl: true,
ssl_opts: [
cacertfile: Path.expand("priv/certs/ca-cert.crt"),
],
parameters: [options: "--cluster=my-cluster-123"]
Run Code Online (Sandbox Code Playgroud)
由于 CockroachDB 也不支持 Ecto/Postgrex 尝试对迁移表进行锁定,因此:migration_lock还需要禁用该配置:
config :my_app, MyApp.Repo,
# ...
migration_lock: false
Run Code Online (Sandbox Code Playgroud)
最后,新的phx.gen.auth生成器默认使用citext扩展程序以不区分大小写的方式存储用户的电子邮件地址。CREATE EXTENSION IF NOT EXISTS citext应删除生成的迁移中执行的行,并且:email字段的列类型应从 更改:citext为:string。
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |