Ruby Sidekiq网络面板显示禁止

Ruby Sidekiq网络面板显示禁止,ruby,sinatra,rack,sidekiq,Ruby,Sinatra,Rack,Sidekiq,我在我的Sinatra应用程序中安装了Sidekiq面板,如下所示: require 'rubygems' require 'bundler' require 'sidekiq/web' env = ENV['RACK_ENV'].to_sym || :development Bundler.require(:default, :sinatra, env) disable :run Encoding.default_external = Encoding::UTF_8 set :envir

我在我的Sinatra应用程序中安装了Sidekiq面板,如下所示:

require 'rubygems'
require 'bundler'
require 'sidekiq/web'

env = ENV['RACK_ENV'].to_sym || :development

Bundler.require(:default, :sinatra, env)
disable :run
Encoding.default_external = Encoding::UTF_8

set :environment, env

use Rack::ShowExceptions
use Rack::Session::Pool
use Rack::MethodOverride

Sidekiq::Web.use Rack::Session::Pool

require File.expand_path '../app/my_app.rb', __FILE__
run Rack::URLMap.new("/" => MyApp.new, "/sidekiq" => Sidekiq::Web.new)
这意味着可以通过
/
访问我的应用程序,也可以通过
/sidekiq
访问sidekiq web面板

现在,当我尝试删除作业时,我总是被禁止。我读了这里和这里,但是升级到
机架保护>1.5.1
或为
Sidekiq::Web
设置会话到目前为止都解决了问题

我正在使用WEBrick以
rackup
启动服务器,所以我认为这不应该是服务器问题


我正在使用sinatra 1.4.2和sidekiq 3.5.1。有什么办法解决这个问题吗?

我找到了解决办法。首先,我从sidekiq 3.4.2更新为4.0.1,从sinatra 1.4.2更新为1.4.6。到目前为止没有问题

禁止
消息的问题是sidekiq的web面板缺少真实性标记。通过添加以下行,它起到了作用:

require 'rubygems'
require 'bundler'
require 'sidekiq/web'

#####################################
# added a require for rack/protection
require 'rack/protection'
#####################################

env = ENV['RACK_ENV'].to_sym || :development

Bundler.require(:default, :sinatra, env)
disable :run
Encoding.default_external = Encoding::UTF_8

set :environment, env

use Rack::ShowExceptions
use Rack::Session::Pool
use Rack::MethodOverride
#####################################
# tell sinatra to use rack's protection methods
use Rack::Protection
#####################################

require File.expand_path '../app/my_app.rb', __FILE__
run Rack::URLMap.new("/" => MyApp.new, "/sidekiq" => Sidekiq::Web.new)

还可以查看列出所有保护方法的位置。

您可能需要将其添加到application.rb(或像config/initializers/sidekiq.rb这样的初始值设定项):

这来自一个,但它仅适用于生产和登台环境


关于这个问题。

到目前为止还没有找到解决方案。在试用sidekiq failures gem()时,我注意到一件事,它显示了相同的行为
禁止

Sidekiq::Web.instance_variable_get(:@middleware).delete_if do |middleware|
  middleware.first == Rack::Protection
end