我正在尝试将凤凰应用程序连接到MS SQL。在网上浏览后,我遇到了几个名为mssql_ecto&的适配器。 mssqlex。
我按照自述文件中的说明将它们添加到项目中,安装了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
我的环境如下..
mssql_ecto repo中已经存在一个问题,我已经尝试了那里的建议,但它仍然没有用。
如果有人设法将他们的phoenix / elixir应用程序连接到macOS上的MSSQL并且可以提供一些指令,那么将非常感激(即使它以与我的方法完全不同的方式完成)。
附注:在具有相同数据库的节点中尝试并且能够连接并查询数据库。
答案 0 :(得分:1)
我本周一直在处理相同的问题,连接到Azure SQL数据库,这就是我的工作。
您看到我遇到的两个主要问题中的第一个:
#1:在没有ODBC的情况下安装Erlang
如果您使用brew或类似的东西安装了Elixir和Erlang,那么您将获得不包含erlang-odbc的Erlang安装。为了解决这个问题,您需要从源代码安装Erlang。
我建议您使用此处记录的方法从源安装Erlang和Elixir: http://www.lambdacat.com/how-to-install-elixir-on-mac/
在构建Erlang之前,请确保删除Kerl选项--without-odbc
。
现在您已正确安装Erlang,odbc_not_started
错误应该消失......将被数据库的连接错误替换。
#2:Mssqlex适配器缺少必需的配置选项
截至目前,mssqlex适配器不支持Azure正在寻找的以下配置选项:
要解决此问题,我forked the mssqlex library并添加了这些选项in a branch。我不是要保持这个,所以请随意自行解决。
要使用修改后的mssqlex,请使用github位置和分支名称替换mix依赖项:
{: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
其他&#34;陷阱&#34;寻找
Azure需要TCP连接:
要连接到Azure SQL数据库,您需要确保hostname:
选项以tcp:
开头。所以,总之,它看起来像
主机名:&#34; tcp:.database.windows.net&#34;
Mssql_ecto不支持Ecto 2.2 +:
如果您收到与Ecto或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
应该这样做!