如何从Foreman启动一个瘦套接字群集

时间:2013-04-12 21:14:55

标签: ruby-on-rails nginx thin foreman

我正在尝试在Discourse代理后面设置Nginx,通过Thin投放,然后通过Foreman启动。

所以我有Procfile这样:

web: thin start -p $PORT --socket tmp/sockets/thin.sock
sidekiq: bundle exec sidekiq -e $RAILS_ENV
clockwork: bundle exec clockwork config/clock.rb

指向套接字的nginx conf文件:

upstream discourse {
  server unix:///var/www/discourse/tmp/sockets/thin.sock;
}

这一切都很有效......只要我只想要一个连接到套接字的web工作者。如果我自己正在运行thin,我可以使用-s4并获得四个瘦工作者,它甚至可以处理套接字文件,创建thin.0.socketthin.1.socket等但是以这种方式运行thin会使工作人员在他们自己的进程中旋转,然后退出,所以如果我将-s4放入我的Procfileforeman会认为某些事情已经死亡并且级联也让自己失望。

只是告诉foreman start -c web=2会带来两个进程......但它们都指向同一个sock文件,似乎都不起作用。

我确信有一种简单的方法可以解决这个问题,但我似乎无法弄清楚这种神奇的咒语。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

所以这很有效:

# Procfile
web: thin start -p 9292 --socket /tmp/thin.0.sock
web: thin start -p 9293 --socket /tmp/thin.1.sock
web: thin start -p 9294 --socket /tmp/thin.2.sock
# and so on

# nginx.conf
upstream backend {
  server unix:/tmp/thin.0.sock
  server unix:/tmp/thin.1.sock
  server unix:/tmp/thin.2.sock
}

[edit]我不认为使用unix套接字时需要端口选项。


[编辑2]好的,在我昨天测试之后,我开始阅读更多关于瘦,unix套接字和nginx的主题,并发现了这个博客:http://jordanhollinger.com/2011/04/22/threaded-thin-is-really-really-slow-on-ruby-1-9-2/。关于此的很多或资源。在此添加,因为它可以帮助人们寻找它。