本周我一直在研究相同的问题,连接到一个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