GitHub最近发布了使用Redis的后台处理应用程序: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resque
我让它在本地工作,但我很难让它在生产中工作。有没有人得到:
谢谢!
P.S。我在Github上发布了一个关于此的问题,但尚未回复。希望一些SO大师可以帮助解决这个问题,因为我在部署方面不是很有经验。谢谢!
答案 0 :(得分:29)
我参加聚会有点晚了,但我想发布一些对我有用的东西。基本上,我有神设置来监控redis和resque。如果它们不再运行,上帝就会重新启动它们。然后,我有一个rake任务,在一个退出我的resque worker的capistrano部署之后运行。一旦工人退出,上帝将启动新员工,以便他们运行最新的代码库。
以下是我在生产中如何使用resque的完整文章:
答案 1 :(得分:9)
我昨晚才想到这一点,对于Capistrano你应该使用san_juan,然后我喜欢使用God来管理工人的部署。至于幸存重启,我不确定,但我每6个月重启一次,所以我不太担心。
虽然他提出了不同的启动方法,但这对我来说最容易实现。 (在deploy.rb中)
require 'san_juan'
after "deploy:symlink", "god:app:reload"
after "deploy:symlink", "god:app:start"
要管理其运行位置,在另一台服务器上等,他会在README
的{{3}}内进行管理。
我在我的切片上使用Passenger,所以它相对容易,我只需要一个config.ru
文件,如下所示:
require 'resque/server'
run Rack::URLMap.new \
"/" => Resque::Server.new
对于我的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>
另外,快速说明。确保你覆盖resque:setup
rake任务,它将为你节省大量时间与上帝一起产生新工人。
我遇到了很多麻烦,所以如果您需要更多帮助,请发表评论。
答案 2 :(得分:4)
Garrett的回答确实很有帮助,只是想发布一些细节。为了做到这一点,需要做很多修修补补......
我也在使用乘客,但是nginx而不是apache。
首先,不要忘记你需要安装sinatra,这让我感动了一段时间。
sudo gem install sinatra
然后你需要为要运行的东西创建一个目录,它必须有一个public和tmp文件夹。它们可以是空的,但问题是git不会在repo中保存一个空目录。该目录必须至少包含一个文件,因此我将一些垃圾文件作为占位符。这是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
然后我编辑了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
不要忘记将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;
}
所以它会在你的部署中重新启动,在deploy.rb
中可能是这样的run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt"
我不确定这是否是最佳方式,我以前从未设置过rack / sinatra应用程序。但它确实有效。
这只是为了让监控应用程序继续运行。接下来我需要找出上帝的部分。
答案 3 :(得分:1)
使用这些步骤而不是使用Web服务器级别和编辑插件进行配置:
#The steps need to be performed to use resque-web with in your application
#In routes.rb
ApplicationName::Application.routes.draw do
resources :some_controller_name
mount Resque::Server, :at=> "/resque"
end
#That's it now you can access it from within your application i.e
#http://localhost:3000/resque
#To be insured that that Resque::Server is loaded add its requirement condition in Gemfile
gem 'resque', :require=>"resque/server"
#To add basic http authentication add resque_auth.rb file in initializers folder and add these lines for the security
Resque::Server.use(Rack::Auth::Basic) do |user, password|
password == "secret"
end
#That's It !!!!! :)
#Thanks to Ryan from RailsCasts for this valuable information.
#http://railscasts.com/episodes/271-resque?autoplay=true