将凤凰应用程序连接到MS SQL Azure数据库

问题描述:

我正尝试将凤凰应用程序连接到MS SQL。在网上浏览后,我遇到了几个适配器,称为mssql_ecto & mssqlex将凤凰应用程序连接到MS SQL Azure数据库

我已经将它们添加到下面的自述文件中的指令的项目,安装ODBC和检查了数据库在线,但现在我收到以下错误..

[error] Mssqlex.Protocol (#PID<0.13069.0>) failed to connect: ** (Mssqlex.Error) odbc_not_started 

我的应用程序的配置如下..

config :my_app, MyApp.Repo, 
adapter: MssqlEcto, 
username: "<my_username>", 
password: "<my_password>", 
database: "test", 
hostname: "<my_server>.database.windows.net", 
pool_size: 10 

我的环境是如下..

  • MacOS的塞拉利昂10.12.5
  • 花好月圆版本:1.4.4

有一个在mssql_ecto回购的问题已经和我试图从那里的建议,但它仍然没有奏效。

如果有人设法将他们的phoenix/elixir应用程序连接到macOS上的MSSQL,并且可以提供一些说明,那么将不胜感激(即使它是以与我的方法完全不同的方式完成的)。

附注:在同一个数据库的节点中试过,并且能够连接并查询数据库。

+0

作为一个调试步骤,你能够从各种数据库应用程序连接到数据库吗? – Tyler

本周我一直在研究相同的问题,连接到一个Azure SQL数据库,这是我的工作。

您所看到的第一个我遇到了两个主要问题:无ODBC安装

  1. 二郎
  2. Mssqlex适配器缺少必需的配置选项

#1:没有安装二郎ODBC

如果你已经使用brew或类似的东西安装了Elixir和Erlang,哟你正在安装不包含erlang-odbc的Erlang。为了解决这个问题,你需要从源代码安装Erlang。

我建议您使用这里介绍的方法从源代码安装这两个Erlang和药剂: http://www.lambdacat.com/how-to-install-elixir-on-mac/

只要确保你删除Kerl选项,--without-odbc,你建二郎之前。

既然您已经正确安装了Erlang,那么odbc_not_started错误应该消失......将被连接错误替换为数据库。

#2:缺少必需的Mssqlex适配器的配置选项

由于这一刻,在mssqlex适配器不支持Azure是寻找以下配置选项:

  1. 加密
  2. TrustServerCertificate
  3. 连接超时

为了解决这个问题,我forked the mssqlex library并添加了那些选项in a branch。我并不承诺保持这一点,所以请随意自行分岔。

为了使用修改后的mssqlex,与GitHub的位置和分支的名称替换混合依赖性:

{:mssqlex, git: "https://github.com/tvanhouten/mssqlex.git", branch: "azure-settings", override: true} 

override: true是重要的,因为mssql_ecto对十六进制的mssqlex版本的依赖。

现在,您可以更新配置:

config :my_app, MyApp.Repo, 
adapter: MssqlEcto, 
username: "<my_username>", 
password: "<my_password>", 
database: "test", 
hostname: "<my_server>.database.windows.net", 
pool_size: 10, 
encrypt: "yes", 
trust_server_certificate: "no", 
connection_timeout: "30 

其他 “陷阱” 看出来的

Azure的需要TCP连接:

为了连接到Azure的SQL数据库,您需要确保hostname:选项以tcp:开头。因此,总之,它看起来就像 主机名:“TCP:.database.windows.net”

Mssql_ecto不支持外生2.2+:

如果您收到有关外生或错误Ecto.SubQuery,您可能需要确保您使用的是由mssql_ecto支持的Ecto版本。在这个时候,这意味着Ecto 2.1.x.同样,这需要你的混音的依赖略有变化:

{:ecto, ">= 2.1.0 and < 2.2.0"} 

相关性高速缓存和锁定问题:如果一切按上述是为了

,但它只是似乎并不像新的依赖性正在更新和编译如预期,做到以下几点:

  1. 运行mix deps.clean --all
  2. 删除mix.lock文件从项目根目录
  3. 运行mix deps.get
  4. 运行mix deps.compile

应该这样做!