使用 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
我刚刚启动了 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