2011-01-05 14 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

2つのプログラムがネットワーク上でお互いに話をしたい場合には、一つのプログラムは、他の1とのTCP接続(「ソケット」)を開くかもしれません。最初のプログラムは、2番目のコンピュータのIPアドレスとプログラムがリッスンしているポートを知る必要があります。

Linuxでは、同じコンピュータ上の2つのプログラムが互いに通信したい場合でも、TCP接続を開くことができます。しかし、彼らはまた、 "ソケットファイル"経由で接続を開くことができます。 LinuxはTCP APIに似たソケットファイルAPIを作成するので、ソケットファイル経由の通信もサポートするためにTCP経由ですでにネットワーク経由で通信しているプログラムを更新するのは大したことではありません。ソケットファイルはTCPより高速ですが、両方のプログラムが同じコンピュータ上にある場合にのみ動作します。

+1

私のRails 4アプリケーションでは、無視される。代わりに、少なくとも 'rake db:migrate'を動作させるために' host:/ path/to/socket/'を設定しなければなりませんでした。 – user569825

5

MySQLには、unix-ishシステム、tcp/ip、およびドメインソケット上で2つの通信方法があります。ソケットRailsまたはデータベースドライバを指定することにより、ネットワーク接続の代わりにソケットが使用されます。ソケットを使用する方が早いかもしれませんが、YMMVです。

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

+0

あなたがDBをアプリケーションサーバと同じボックスで実行している場合にのみソケットが機能するため、このメカニズムはクラスタ化されたデプロイメントには適していません – DrewM

0

私のdatabase.ymlにソケットが指定されているため、午後は疲れました。テスト環境のデータベース仕様は単純に解析されませんでした。 もしあなたのテストデータベースに問題はないが、すべてが問題ないようだが、ソケット仕様を削除してみる。

関連する問題