2011-01-05 63 views
8

config/database.yml中的套接字聲明有什麼用?什麼是在Ruby on Rails database.yml中的套接字聲明?

示例代碼:

staging: 
    adapter: mysql 
    encoding: utf8 
    database: (database) 
    pool: 5 
    username: (user) 
    password: (pass) 
    socket: /tmp/mysql.sock  # <--------- this line 

我的應用程序的工作原理,閹此行被註釋掉與否。那麼它是爲了什麼?我有什麼理由可以離開它,評論它或改變它的價值?

回答

12

當兩個程序想通過網絡來相互交談,一個程序可能打開了另外一個TCP連接(「套接字」)。第一個程序需要知道第二臺計算機的IP地址和程序正在偵聽的端口。

在Linux上,當同一臺計算機上的兩個程序想要相互通信時,它們仍然可以打開TCP連接。但他們也可以通過「套接字文件」打開連接。 Linux使套接字文件API與TCP API非常相似,因此更新已經通過TCP通過網絡進行通信的程序以支持通過套接字文件進行通信並不是什麼大事。套接字文件比TCP快,但只在兩個程序在同一臺計算機上時才起作用。

+1

在我的Rails 4應用程序中,套接字設置似乎被忽略。相反,我必須將'host:/ path/to/socket /'設置爲至少使'rake db:migrate'工作。 – user569825 2014-06-27 13:25:41

5

MySQL有兩種方法在unix-ish系統,tcp/ip和域套接字上與它進行通信。通過指定套接字Rails或數據庫驅動程序,將使用套接字而不是網絡連接。它可以更快地使用插座,但YMMV。

http://dev.mysql.com/doc/refman/5.5/en/connecting.html

+0

作爲額外的預留套接字只有在DB與應用程序服務器在同一個盒子上運行時纔有效 - 所以這種機制往往不適合集羣部署 – DrewM 2011-01-05 22:10:37

0

由於在我的database.yml中指定的套接字,我浪費了整個下午 - 測試環境的數據庫規範根本沒有被解析。 所以,如果你的測試數據庫有問題,雖然一切看起來都沒有問題,但請嘗試刪除套接字規範。