如何在生产中部署resque worker?

Bri*_*ong 37 capistrano ruby-on-rails delayed-job resque redis

GitHub最近发布了使用Redis的后台处理应用程序:http : //github.com/defunkt/resque http://github.com/blog/542-introducing-resque

我让它在本地工作,但我很难让它在生产中工作.有没有人得到:

  1. Capistrano配方部署工人(控制工人数量,重新启动工作人员等)
  2. 部署工作人员将机器与主应用程序运行的位置分开,这里需要哪些设置?
  3. 得到redis在服务器上重启(我尝试将它放入cron但没有运气)
  4. 你是如何在你的部署中使用resque-web(他们出色的监控应用程序)的?

谢谢!

PS我在Github上发布了一个关于此的问题,但尚无回复.希望一些SO大师可以帮助解决这个问题,因为我在部署方面不是很有经验.谢谢!

tsm*_*ngo 29

我参加派对有点晚了,但我想发布一些对我有用的东西.基本上,我有神设置来监控redis和resque.如果它们不再运行,上帝就会重新启动它们.然后,我有一个rake任务,在一个退出我的resque worker的capistrano部署之后运行.一旦工人退出,上帝将启动新员工,以便他们运行最新的代码库.

以下是我在生产中如何使用resque的完整文章:

http://thomasmango.com/2010/05/27/resque-in-production


Gar*_*ett 9

我昨晚才想到这一点,因为Capistrano你应该使用san_juan,然后我喜欢使用上帝来管理工人的部署.至于幸存重启,我不确定,但我每6个月重启一次,所以我不太担心.

虽然他提出了不同的启动方法,但这对我来说最容易实现.(在deploy.rb中)

require 'san_juan'
after "deploy:symlink", "god:app:reload"
after "deploy:symlink", "god:app:start"
Run Code Online (Sandbox Code Playgroud)

为了管理它在哪里运行,在另一台服务器上等,他在那里的配置部分介绍了它README.

我在我的切片上使用Passenger,所以它相对容易,我只需要一个config.ru这样的文件:

require 'resque/server'

run Rack::URLMap.new \
  "/" => Resque::Server.new
Run Code Online (Sandbox Code Playgroud)

对于我的VirtualHost文件,我有:

<VirtualHost *:80>
        ServerName resque.server.com
        DocumentRoot /var/www/server.com/current/resque/public

        <Location />
          AuthType Basic
          AuthName "Resque Workers"
          AuthUserFile /var/www/server.com/current/resque/.htpasswd
          Require valid-user
        </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

另外,快速说明.确保你在resque:setuprake任务之外,它将为你节省大量的时间来与上帝产生新的工人.

我遇到了很多麻烦,所以如果您需要更多帮助,请发表评论.


Bri*_*ong 4

加勒特的回答确实很有帮助,只是想发布更多细节。花了很多功夫才把它弄好......

我也在使用passenger,但是是nginx而不是apache。

首先,不要忘记你需要安装 sinatra,这让我困惑了一段时间。 sudo gem install sinatra

然后你需要为要运行的东西创建一个目录,并且它必须有一个 public 和 tmp 文件夹。它们可以为空,但问题是 git 不会在存储库中保存空目录。该目录中必须至少有一个文件,因此我制作了一些垃圾文件作为占位符。这是 git 中的一个奇怪的功能/错误。

我正在使用 resque 插件,因此我在那里创建了目录(默认的 config.ru 所在的位置)。看起来 Garrett 在他的rails_root 中创建了一个新的“resque”目录。任何一个都应该有效。为我...

cd MY_RAILS_APP/vendor/plugins/resque/
mkdir public 
mkdir tmp
touch public/placeholder.txt
touch tmp/placeholder.txt
Run Code Online (Sandbox Code Playgroud)

然后我编辑了一下MY_RAILS_APP/vendor/plugins/resque/config.ru,看起来像这样:

#!/usr/bin/env ruby
require 'logger'

$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
require 'resque/server'

use Rack::ShowExceptions

# Set the AUTH env variable to your basic auth password to protect Resque.
AUTH_PASSWORD = "ADD_SOME_PASSWORD_HERE"
if AUTH_PASSWORD
  Resque::Server.use Rack::Auth::Basic do |username, password|
    password == AUTH_PASSWORD
  end
end

run Resque::Server.new
Run Code Online (Sandbox Code Playgroud)

不要忘记更改ADD_SOME_PASSWORD_HERE您想要用来保护应用程序的密码。

最后,我使用的是 Nginx,所以这是我添加到 nginx.conf 中的内容

server {
  listen   80;
  server_name  resque.seoaholic.com;
  root /home/admin/public_html/seoaholic/current/vendor/plugins/resque/public;
  passenger_enabled on;
}
Run Code Online (Sandbox Code Playgroud)

因此它会在您的部署中重新启动,可能在您的deploy.rb中是这样的

run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt"
Run Code Online (Sandbox Code Playgroud)

我不太确定这是否是最好的方法,我以前从未设置过rack/sinatra 应用程序。但它有效。

这只是为了让监控应用程序运行。接下来我需要弄清楚上帝的部分。