在与乘客一起使用的生产中使用resque时,没有路线与[GET]“ / resque / overview”相匹配

问题描述

我正在使用resque进行后台处理,路线/ resque在开发中工作正常,但是在生产中(使用乘客)则不行,log / production.log显示错误

ActionController::RoutingError (No route matches [GET] "/resque/overview")

当我运行命令时

rails routes | grep resque

显示

/resque                                                                        
      #<Resque::Server app_file="/var/www/webroot/ROOT/vendor/bundle/ruby/2.7.0/gems/resque-2.0.0/lib/resque/server.rb">

我的Gemfile:

gem 'resque'

我的配置/初始化程序/resque.rb

require 'resque/server' # this is needed for resque web UI

redis_url = {
  development: 'localhost:6379',production: Redis.new(url: 'redis://{user}:{password}/{host_url}:6379/0')
}
rails_env = Rails.env.to_sym || 'development'

Resque.redis = redis_url[rails_env.to_sym]

我的路线

authenticated :user,-> user { user.admin? }  do
    mount Resque::Server.new,:at => "/resque"
 end

解决方法

我会回答我的问题,

问题是以下几行

authenticated :user,-> user { user.admin? }  do

哪个似乎不适用于我安装的devise版本4.7.3

一旦我摆脱了它,/ resque路线就开始起作用了!但是我需要一种方法来仅限制管理员用户查看该路由,所以这就是我所做的,

在config / initializers / resque.rb中,我添加了这个:

require 'resque/server' # this is needed for resque web UI

class SecureResqueServer < Resque::Server
  before do
    redirect '/' unless request.env['warden'].user&.admin?
  end
end

然后在routes.rb中,我的/ resque路由变为:

mount SecureResqueServer.new,:at => "/resque"

以上课程和路线来自Resque,Devise and admin authentication

那解决了我的问题...不确定,但似乎这个问题与此有关:

https://github.com/heartcombo/devise/issues/5019