Sidekiq 网页面板显示禁止
Sidekiq web panel shows forbidden
我在我的 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
访问。
现在,当我尝试删除作业时,总是得到 Forbidden
。我在此处阅读 https://github.com/mperham/sidekiq/issues/1289 and here https://github.com/mperham/sidekiq/issues/2487,但无论是升级到 rack-protection > 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。目前没有问题。
Forbidden
消息的问题是 sidekiq 的网络面板缺少真实性令牌。通过添加以下行,它起作用了:
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)
另请查看 https://github.com/sinatra/rack-protection,其中列出了所有保护方法。
您可能需要将此添加到 application.rb(或像 config/initializers/sidekiq.rb 这样的初始值设定项):
Sidekiq::Web.instance_variable_get(:@middleware).delete_if do |middleware|
middleware.first == Rack::Protection
end
来自 recent commit,但仅适用于生产和暂存环境。
Detailed explanation关于这个问题。
我在我的 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
访问。
现在,当我尝试删除作业时,总是得到 Forbidden
。我在此处阅读 https://github.com/mperham/sidekiq/issues/1289 and here https://github.com/mperham/sidekiq/issues/2487,但无论是升级到 rack-protection > 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。目前没有问题。
Forbidden
消息的问题是 sidekiq 的网络面板缺少真实性令牌。通过添加以下行,它起作用了:
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)
另请查看 https://github.com/sinatra/rack-protection,其中列出了所有保护方法。
您可能需要将此添加到 application.rb(或像 config/initializers/sidekiq.rb 这样的初始值设定项):
Sidekiq::Web.instance_variable_get(:@middleware).delete_if do |middleware|
middleware.first == Rack::Protection
end
来自 recent commit,但仅适用于生产和暂存环境。
Detailed explanation关于这个问题。