Ruby on Rails database.yml中的socket声明是什么?

在config / database.yml中使用socket声明有什么用?

示例代码:

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

我的应用程序有效,这条线是否被评论。 那有什么用呢? 我有什么理由可以留下它,评论它或改变它的价值?

当两个程序想要通过网络相互通信时,一个程序可能会打开与另一个程序的TCP连接(“套接字”)。 第一个程序需要知道第二台计算机的IP地址和程序正在侦听的端口。

在Linux上,当同一台计算机上的两个程序想要相互通信时,它们仍然可以打开TCP连接。 但他们也可以通过“套接字文件”打开连接。 Linux使套接字文件API与TCP API非常相似,因此更新已经通过TCP通过网络进行通信的程序以支持通过套接字文件进行通信并不是什么大问题。 套接字文件比TCP快,但仅在两个程序在同一台计算机上时才有效。

MySQL有两种在unix-ish系统,tcp / ip和域套接字上与它通信的方法。 通过指定套接字Rails,或者说数据库驱动程序,将使用套接字而不是网络连接。 它可以更快地使用sockets,但YMMV。

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

由于我的database.yml中指定了一个套接字,我浪费了整整一个下午 – 测试环境的数据库规范根本没有被解析。 因此,如果您的测试数据库无法访问,虽然一切似乎都没问题,请尝试删除套接字规范。