【问题标题】:Error when creating mssql db with ecto使用 ecto 创建 mssql db 时出错
【发布时间】:2016-04-11 14:50:13
【问题描述】:

我刚刚开始使用 Elixir Phoenix 新网络应用:

mix phoenix.new phoenix_sample --database mssql

它生成了带有 db 配置的 config/dev.exs 文件,我已经修改以匹配我当前的 ms sql server:

config :phoenix_sample, PhoenixSample.Repo,
  adapter: Tds.Ecto,
  username: "dev",
  password: "dev",
  database: "phoenix_sample_db",
  hostname: "localhost",
  pool_size: 10

我能够以 dev 用户身份登录 ssms 并连接到 phoenix_sample_db 数据库

但是当我运行时:mix ecto.create

我总是出错:

** (EXIT from #PID<0.46.0>) %Tds.Error{message: "tcp connect: nxdomain", mssql: nil}

17:44:04.805 [error] GenServer #PID<0.274.0> terminating
** (stop) %Tds.Error{message: "tcp connect: nxdomain", mssql: nil}
Last message: {:connect, [port: 1433, hostname: ".", database: "master", otp_app: :phoenix_sample, repo: PhoenixSample.Repo, adapter: Tds.Ecto, username: "dev", password: "dev", pool_size: 10]}
State: %{attn_timer: nil, env: %{trans: <<0>>}, ireq: nil, itcp: nil, opts: [port: 1433, hostname: ".", database: "master", otp_app: :phoenix_sample, repo: PhoenixSample.Repo,
adapter: Tds.Ecto, username: "dev", password: "dev", pool_size: 10], pak_data: "", pak_header: "", queue: {[{{:connect, [port: 1433, hostname: ".", database: "master", otp_app: :phoenix_sample, repo: PhoenixSample.Repo, adapter: Tds.Ecto, username: "dev", password: "dev", pool_size: 10]}, {#PID<0.46.0>, #Reference<0.0.2.504>}, #Reference<0.0.2.505>}], []}, sock: nil, state: :ready, statement: nil, tail: "", usock: nil}

为什么它不起作用以及为什么 ecto 试图连接到 master db?

如果ecto 尝试创建新数据库,那么我需要将sa 凭据传递给数据库用户配置吗?

【问题讨论】:

  • 看到这个:github.com/elixir-lang/ecto/issues/932 注意说 nxdomain 意味着它无法到达主机的部分。由于您指向本地主机,因此可能是防火墙问题。
  • @OnorioCatenacci 我已经关闭了防火墙,但仍然是同样的错误
  • @Grievoushead 我没有将 MSSQL 与 Phoenix 和 Elixir 一起使用,但像 Onorio 所说的 nxdomain 意味着无法访问主机。但是,我想指出您的逻辑中的一个缺陷。当您已经创建了 phoenix_sample_db 时,您似乎想运行 ecto.create 。我还查看了 TDS GitHub 并提到了这一点:Tds Supports sql instances by passing instance: "instancename" to the connection options。也许您需要在配置中传递实例名称?
  • 你是否在 MSSQL 中启用了 TCP 连接? Tds 正在尝试连接到端口 1433,这是 MSSQL 中的默认端口,但默认情况下未启用 TCP 连接。
  • @hectorsq 谢谢,它解决了,不知何故,我虽然默认使用共享内存协议。

标签: elixir phoenix-framework


【解决方案1】:

我需要在 Sql Server 配置管理器中启用 TCP/IP 协议

之后我重新启动了 mssqlserver 服务并使用以下配置运行 mix ecto.create

config :phoenix_sample, PhoenixSample.Repo,
  adapter: Tds.Ecto,
  username: "sa",
  password: "********",
  database: "test_ecto",
  hostname: "SERG-MAC"

输出:

终于成功了。 感谢@hectorsq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 2017-01-28
    • 2016-03-14
    相关资源
    最近更新 更多