问题描述
我正在使用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
那解决了我的问题...不确定,但似乎这个问题与此有关: