将凤凰应用程序连接到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,并且可以提供一些说明,那么将不胜感激(即使它是以与我的方法完全不同的方式完成的)。
附注:在同一个数据库的节点中试过,并且能够连接并查询数据库。
本周我一直在研究相同的问题,连接到一个Azure SQL数据库,这是我的工作。
您所看到的第一个我遇到了两个主要问题:无ODBC安装
- 二郎
- 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是寻找以下配置选项:
- 加密
- TrustServerCertificate
- 连接超时
为了解决这个问题,我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"}
相关性高速缓存和锁定问题:如果一切按上述是为了
,但它只是似乎并不像新的依赖性正在更新和编译如预期,做到以下几点:
- 运行
mix deps.clean --all
- 删除
mix.lock
文件从项目根目录 - 运行
mix deps.get
- 运行
mix deps.compile
应该这样做!
作为一个调试步骤,你能够从各种数据库应用程序连接到数据库吗? – Tyler