2016-04-05 46 views
2

MSSQL數據庫,當我剛開始藥劑鳳凰新Web應用程序有:錯誤創建與外生

mix phoenix.new phoenix_sample --database mssql 

它生成的配置/ dev.exs與DB的配置文件,我已經修改,以符合我目前的MS SQL Server:

config :phoenix_sample, PhoenixSample.Repo, 
    adapter: Tds.Ecto, 
    username: "dev", 
    password: "dev", 
    database: "phoenix_sample_db", 
    hostname: "localhost", 
    pool_size: 10 

我能夠登錄到SSMS爲dev用戶和連接到數據庫phoenix_sample_db

但是當我運行:mix ecto.create

我總是報錯了:

** (EXIT from #PID<0.46.0>) %Tds.Error{message: "tcp connect: nxdomain", mssql: nil} 

17:44:04.805 [error] GenServer #PID<0.274.0> terminating 
** (stop) %Tds.Error{message: "tcp connect: nxdomain", mssql: nil} 
Last message: {:connect, [port: 1433, hostname: ".", database: "master", otp_app: :phoenix_sample, repo: PhoenixSample.Repo, adapter: Tds.Ecto, username: "dev", password: "dev", pool_size: 10]} 
State: %{attn_timer: nil, env: %{trans: <<0>>}, ireq: nil, itcp: nil, opts: [port: 1433, hostname: ".", database: "master", otp_app: :phoenix_sample, repo: PhoenixSample.Repo, 
adapter: Tds.Ecto, username: "dev", password: "dev", pool_size: 10], pak_data: "", pak_header: "", queue: {[{{:connect, [port: 1433, hostname: ".", database: "master", otp_app: :phoenix_sample, repo: PhoenixSample.Repo, adapter: Tds.Ecto, username: "dev", password: "dev", pool_size: 10]}, {#PID<0.46.0>, #Reference<0.0.2.504>}, #Reference<0.0.2.505>}], []}, sock: nil, state: :ready, statement: nil, tail: "", usock: nil} 

爲什麼它不工作,爲什麼ecto試圖連接到master分貝?

如果ecto試圖創建新的數據庫,那麼我需要將sa憑證傳遞給db用戶配置?

+0

看到這個:https://github.com/elixir-lang/ecto/issues/932請注意那部分,說nxdomain意味着它不能到達主機。由於您指向本地主機,因此可能是防火牆問題。 –

+0

@OnorioCatenacci我已關閉防火牆,但仍然是相同的錯誤 – Grievoushead

+0

@Grievoushead我沒有使用MSSQL與Phoenix和Elixir,但像Onorio說,nxdomain意味着主機無法聯繫到。但是我想指出你的邏輯有一個缺陷。您似乎想要在已經創建phoenix_sample_db時運行ecto.create。 另外我看了TDS GitHub,提到這個: Tds通過將instance:「instancename」傳遞給連接選項來支持sql實例。 也許你需要在配置中傳遞實例名稱? –

回答

1

我需要啓用TCP/IP協議在SQL Server配置管理

enter image description here

之後,我已經重新啓動MSSQLServer服務,並與下面的配置跑mix ecto.create

config :phoenix_sample, PhoenixSample.Repo, 
    adapter: Tds.Ecto, 
    username: "sa", 
    password: "********", 
    database: "test_ecto", 
    hostname: "SERG-MAC" 

輸出: enter image description here

最後它的工作原理。 感謝@hectorsq