Rob*_*ion 6 sql-server elixir azure phoenix-framework
我正在尝试将凤凰应用程序连接到MS SQL.在网上浏览后,我遇到了几个名为mssql_ecto&mssqlex的适配器.
我按照自述文件中的说明将它们添加到项目中,安装了odbc并检查了数据库是否在线,但我现在收到以下错误..
[error] Mssqlex.Protocol (#PID<0.13069.0>) failed to connect: ** (Mssqlex.Error) odbc_not_started
Run Code Online (Sandbox Code Playgroud)
我的应用程序配置如下..
config :my_app, MyApp.Repo,
adapter: MssqlEcto,
username: "<my_username>",
password: "<my_password>",
database: "test",
hostname: "<my_server>.database.windows.net",
pool_size: 10
Run Code Online (Sandbox Code Playgroud)
我的环境如下..
mssql_ecto repo中已经存在一个问题,我已经尝试了那里的建议,但它仍然无效.
如果有人设法将他们的phoenix/elixir应用程序连接到macOS上的MSSQL并且可以提供一些指令,那将非常感激(即使它以与我的方法完全不同的方式完成).
附注:在具有相同数据库的节点中尝试并且能够连接并查询数据库.
小智 2
我本周一直在解决同样的问题,连接到 Azure SQL 数据库,这就是我所做的工作。
您看到的是我遇到的两个主要问题中的第一个:
#1:Erlang 在没有 ODBC 的情况下安装
如果您使用brew或类似的东西安装了Elixir和Erlang,那么您将获得不包含erlang-odbc的Erlang安装。为了解决这个问题,您需要从源代码安装 Erlang。
我建议您使用此处记录的方法从源代码安装 Erlang 和 Elixir: http://www.lambdacat.com/how-to-install-elixir-on-mac/
只需确保--without-odbc在构建 Erlang 之前删除 Kerl 选项即可。
现在您已经正确安装了 Erlang,odbc_not_started错误应该会消失...并被数据库的连接错误所取代。
#2:Mssqlex 适配器缺少必需的配置选项
截至目前,mssqlex适配器不支持 Azure 正在寻找的以下配置选项:
为了解决这个问题,我分叉了 mssqlex 库并将这些选项添加到分支中。我不承诺维护这个,所以请随意自己分叉它。
为了使用修改后的 mssqlex,请将 mix 依赖项替换为 github 位置和分支名称:
{:mssqlex, git: "https://github.com/tvanhouten/mssqlex.git", branch: "azure-settings", override: true}
Run Code Online (Sandbox Code Playgroud)
这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
Run Code Online (Sandbox Code Playgroud)
其他需要注意的“陷阱”
Azure 需要 TCP 连接:
为了连接到 Azure SQL 数据库,您需要确保该hostname:选项以tcp:. 因此,总的来说,它看起来像主机名:“tcp:.database.windows.net”
Mssql_ecto 不支持 Ecto 2.2+:
如果您收到与 Ecto 或 Ecto.SubQuery 相关的错误,您可能需要确保您使用的 Ecto 版本受 mssql_ecto 支持。此时,这意味着 Ecto 2.1.x。同样,这需要对您的混合依赖项进行轻微更改:
{:ecto, ">= 2.1.0 and < 2.2.0"}
Run Code Online (Sandbox Code Playgroud)
依赖缓存和锁定问题:
如果根据上述一切似乎都按顺序进行,但新的依赖项似乎没有按预期更新和编译,请执行以下操作:
mix deps.clean --allmix.lock从项目根目录中删除该文件mix deps.getmix deps.compile应该这样做!
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |