2017-07-19 7 views
0

J'ai ici une application RoR, ce que j'utilise avec le serveur d'applications mince.Comment puis-je configurer thin de .yml pour utiliser les sockets TCP?

Sa configuration est dans un fichier .yml, donc:

--- 
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 

Comment pourrais-je utiliser un socket TCP au lieu d'un socket unix pour écouter?

La documentation que j'ai trouvée ne mentionne même jamais la possibilité, bien que des références indirectes disent que c'est possible.

La cause du problème est que le web frontend (apache2) n'est pas très puissant pour envoyer par proxy des requêtes http à un chemin unix. Ce ne serait pas un problème avec nginx.

Répondre

0

En théorie, vous pouvez simplement utiliser une adresse IP: ADDR au lieu du chemin de prise:

socket: 127.0.0.1:3000 

fonctionnera. Mais, si vous utilisez plusieurs processus fins, vous aurez un problème.

(Ce qui est très probable, parce que le rubis entier est une chose à part, si l'on considère les temps d'attente des E/S, le nombre de cœurs de processeur est peut-être plus élevé).

D'une certaine manière le décodeur d'adresse de socket de l'interpréteur de configuration fin est assez intelligent pour utiliser l'adresse IP ordinaire, mais il augmente l'IP et non le port pour les sockets supplémentaires. Ainsi, vous avez plusieurs instances minces écouter sur

# 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 

plutôt qu'ils écouteront sur

# 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 

Ce comportement surréaliste est probablement pas ce que vous voulez. (Bien que si vous avez des interfaces actives sur toutes les IP, cela pourrait fonctionner.)

Cependant, cette chose ruby ​​a la particularité d'avoir une affectation directe entre ses options de ligne de commande et les options du fichier de configuration. Et une commande thin --help vous les montrera. Vous pouvez appliquer une écoute TCP en utilisant les address et port Options:

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

Vous obtiendrez déjà le résultat correct. Les valeurs par défaut sont 0.0.0.0 et 3000. Comme apache ne veut utiliser un seul port tcp avec ses paramètres les plus courants (ProxyPass, ProxyPassReverse directives), vous avez également besoin de quelques astuces, un cluster de proxy d'équilibrage de charge. L'extrait de configuration pertinent:

<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/