部署 生产环境 Resque web 的部署

匿名 · 2012年05月15日 · 最后由 tumayun 回复于 2012年10月08日 · 6505 次阅读

最近在部署产品的生产环境,疑惑的地方是 resque web 需不需要部署,部署的最好方法是什么?

如果不部署的话,怎样监控 jobs 的运行情况,如果部署的话,是用 mount 到一个 route, 比如'/resque', 还是用另外一个端口?觉得用'/resque'的话,太容易被普通用户误访问到。

大家是怎么部署 resque web 的呢?

mount 到 euqser?

可以防火墙禁止外部 ip 访问,或者 rack 加一个用户名密码验证

/resque 添加一个 base-auth 应该不难吧?

匿名 #4 2012年05月15日

#3 楼 @lgn21st 嗯,这样貌似最简单

匿名 #5 2012年05月15日

#1 楼 @cqpx 我也想过用一个很复杂的 route, 但是不能防止 robot

加一个用户名密码认证是很好的办法,可以用 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

如果服务器在公网上,用 basic-auth 建议挂上 https, 以前有个朋友因为偷懒没加密,结果丢了 mysql 密码

#9 楼 @aNdReW_Qx 丢 mysql 密码没多大问题吧?不是都有防火墙么。

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

在 Rails 2 下怎么加上 Resque-Web ?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号