Ruby Sidekiq网络面板显示禁止
我在我的Sinatra应用程序中安装了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
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