2017-06-14 186 views
4

我正嘗試將鳳凰應用程序連接到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

回答

1

本週我一直在研究相同的問題,連接到一個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

應該這樣做!

相關問題