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