2017-07-19 6 views
0

私はここにRoRアプリを持っています。薄いアプリケーションサーバで使っているものです。tcpソケットを使用するにはどのようにthinを.ymlから設定できますか?

その構成はそう、.ymlファイルである:

--- 
pid: /srv/cica/tmp/pids/thin.pid 
group: cica 
wait: 30 
timeout: 30 
log: /srv/cica/log/thin.log 
max_conns: 1024 
require: [] 

environment: production 
max_persistent_conns: 512 
servers: 4 
daemonize: true 
user: cica 
socket: /srv/cica/tmp/thin.sock 
chdir: /srv/cica 

は、どのように私はリスニング用のUNIXソケットの代わりにTCPソケットを使用することができますか?

私が見つけたドキュメンテーションは、たとえ間接的な言及が可能であると言われても、可能性についても言及していません。

問題の原因は、フロントエンドWeb(apache2)がUNIXパスへのHTTP要求をプロキシすることにあまり強くないことです。それはnginxの問題ではありません。

答えて

0

理論的には、あなたは、単にIPを使用することができます。ADDR代わりにソケットパスの:

socket: 127.0.0.1:3000 

が動作します。しかし、複数のシンプロセスを使用すると、問題が発生します。

(まるでルビー全体がシングルスレッドなので、IO待ち時間を考慮すると、CPUコアの数としてかなり大きなプロセス番号も可能です)。

薄い構成インタープリタのソケットアドレスデコーダは、通常のIPアドレスを使用するには十分スマートですが、は、追加ソケットのポートではなくIPを増やします。。したがって、あなたは、この非現実的な行動は、あなたが望んでいないものを可能性があり、むしろ彼らは

# it would be okay, but not this happens 
127.0.0.1:3000 
127.0.0.1:3001 
127.0.0.1:3002 
127.0.0.1:3003 

リスニングする

# thin will listen on these addresses 
127.0.0.1:3000 
127.0.0.2:3000 
127.0.0.3:3000 
127.0.0.4:3000 

に耳を傾け、複数の薄いのインスタンスを持つことになります。 (あなたがIPのすべてのアクティブなインターフェイスを持っている場合が、それは仕事ができる。)

しかし、このルビーの事はそのコマンドラインオプションと設定ファイルのオプションの間に直接の割り当てがあるという優れた機能を持っています。そしてthin --helpコマンドがあなたにそれを表示します。あなたはaddressportオプションを使用してリスニングTCPを強制することができます

#socket: /srv/cica/tmp/thin.sock 
address: 127.0.0.1 
port: 3000 

だから、あなたはすでに正しい結果を取得します。

デフォルト値は0.0.0.03000です。

apacheは、最も一般的な設定(ProxyPassProxyPassReverseのディレクティブ)を持つ単一のtcpポートだけにプロキシしたいので、ロードバランシングプロキシクラスタというちょっとしたトリッキーが必要です。関連する設定スニペット:

<Proxy balancer://cicas> 
    BalancerMember http://localhost:3000 disablereuse=On route=cica1 
    BalancerMember http://localhost:3001 disablereuse=On route=cica2 
    BalancerMember http://localhost:3002 disablereuse=On route=cica3 
    BalancerMember http://localhost:3003 disablereuse=On route=cica4 
    ProxySet lbmethod=byrequests 
</Proxy> 

ProxyPass/balancer://cicas/ 
関連する問題