最近在部署产品的生产环境,疑惑的地方是 resque web 需不需要部署,部署的最好方法是什么?
如果不部署的话,怎样监控 jobs 的运行情况,如果部署的话,是用 mount 到一个 route, 比如'/resque', 还是用另外一个端口?觉得用'/resque'的话,太容易被普通用户误访问到。
大家是怎么部署 resque web 的呢?
加一个用户名密码认证是很好的办法,可以用 Resque::Server.use(Rack::Auth::Basic) do |...| ... end
可以用前端的 web server 来给端口或者 url 添加认证,比如你直接 mount /resuqe 到你的应用,前端用 nginx 配置一下:
location /resque {
auth_basic "Restricted";
auth_basic_user_file htpasswd;
}
放一个 resque_auth.rb 在 initializers 目录下,内容如下
Resque::Server.use(Rack::Auth::Basic) do |user, password|
password == "secretadmin" and user == "admin"
end
routes.rb
namespace :admin do
constraints CanAccessResque do
mount Resque::Server, at: 'resque'
end
end
config/initializers/resque.rb
class CanAccessResque
def self.matches?(request)
current_user = request.env['warden'].user # or other Auth way
return false if current_user.blank?
Ability.new(current_user).can? :manage, Resque
end
end
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user && user.admin?
can :manage, Resque
end
end
end
不知各位如何加载 resque_web 的静态文件? 我们现在是这样:
run "ln -s #{shared_path}/bundle/ruby/1.8/gems/resque-1.17.1/lib/resque/server/public #{release_path}/public/resque"
但是我很不爽它需要指定 resque 的版本和 gem 的位置
Update: 刚刚在 Github 上面找到相关的 ISSUE,看来是和 nginx 的设置有关: https://github.com/defunkt/resque/issues/418