2011-01-05 58 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中指定的套接字,我浪费了整个下午 - 测试环境的数据库规范根本没有被解析。 所以,如果你的测试数据库有问题,虽然一切看起来都没有问题,但请尝试删除套接字规范。