使用 ecto 创建 mssql 数据库时出错

Error when creating mssql db with ecto

我刚刚启动了 Elixir Phoenix 新的网络应用程序:

mix phoenix.new phoenix_sample --database mssql

它生成了 config/dev.exs 文件和数据库配置,我已经修改以匹配我当前的 ms sql 服务器:

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 数据库?

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

我需要在 Sql 服务器配置管理器

中启用 TCP/IP 协议

之后,我重新启动了 mssqlserver 服务和 运行 mix ecto.create,配置如下:

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

输出:

终于成功了。 感谢@hectorsq