首页 > 解决方案 > 与乘客一起在生产中使用 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">

我的宝石文件:

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

标签: ruby-on-railsresque

解决方案


我会回答我的问题,

问题是以下行

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

这似乎不适用于我安装的设计版本 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 和 admin 认证

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

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


推荐阅读