我编写了一个连接两个不同数据库的elixir应用程序,我在远程数据库开发环境中运行良好 - 将相同的设置连接到我的vpn中的不同数据库。当我针对不同的远程SQL Server数据库运行它时,我收到一个奇怪的错误:
**(DBConnection.ConnectionError)错误的返回值:{:错误,%Tds.Protocol {env:%{trans:<< 0 >>},itcp:nil,opts:[密码::已删除,idle_timeout:5000,名称:EventBridge.C3poRepo.Pool,otp_app :: event_bridge,repo:EventBridge.C3poRepo,timeout:15000,pool_timeout:5000,适配器:Tds.Ecto,用户名:: ALSO_REDACTED,数据库::已删除,主机名::已删除,池:DBConnection .Poolboy],pak_data:“”,pak_header:“”,查询:%Tds.Query {handle:1,statement:nil},结果:%Tds.Result {columns:[],command:nil,num_rows:0, rows:[]},sock:{:gen_tcp,#Port <0.6472>},state :: ready,tail:“”,transaction:nil,usock:nil}}
我在此数据库的配置中获得的凭据是正确的 - 我使用DBeaver手动验证了它们。我相信我能够调试这个,但我遇到了一些我不明白的错误信息。特别:
{:error,%Tds.Protocol {env:%{trans:<< 0 >>}
为了完整起见,这里是mix.exs中的deps部分:
defp deps do
[
{:tds_ecto, "~> 2.0.3"},
{:postgrex, ">= 0.0.0"},
{:gen_stage, "~> 0.12"},
{:timex, "~> 3.1"},
{:timex_ecto, "~> 3.0"},
{:poison, "~> 3.1"},
{:ecto, "~> 2.1"}
]
end
我要问的是能够深入了解错误消息的这一部分是什么意思,或者甚至是对整个错误输出的一些更一般的反馈。
以下是有问题的Repo的两个配置实例。首先是有效的:
config :event_bridge, EventBridge.FirstRepo,
adapter: Tds.Ecto,
database: "first_repo_development",
username: "testuser",
password: "password_redacted",
hostname: "server_one"
以下是不起作用的配置:
config :event_bridge, EventBridge.FirstRepo,
adapter: Tds.Ecto,
database: "first_repo_staging",
username: "staging_username",
password: "password_redacted",
hostname: "server_twelve"
两者都在DBeaver中工作。
在db配置中添加pool_size:然后重试