在Sidekiq的管理界面上发生了500错误

在Sidekiq的管理界面(Sidekiq::Web)出现了500错误,幸运地解决了这个问题,现在将解决的方法总结如下。

开发环境

    • Rails: 5.2.3

 

    • Ruby: 2.6.3

 

    • rack: 2.2.3

 

    • Redis: 4.1.2

 

    Sidekiq: 6.0.0

发生的错误

NoMethodError (undefined method `match' for #<Rack::Session::SessionId:xxxxxxxxxxxxxx>):

做过的事情 (zuò guò de shì

嘗試過的事情 (Shì shì guò de

1. 尝试删除会话
2. 更新rack
3. 尝试更新bundle

找到解决的办法

4. 尝试更新 redis-rack
5. 尝试更新 redis-actionpack


试着删除会话。

require 'sidekiq/web'
Sidekiq::Web.set :sessions, false # 追加

尽管管理界面被显示出来了,但只是清除了会话,并没有解决根本问题。

更新服务器机架。

更新rack bundle

Note: rack version regressed from 2.2.3 to 2.0.9

错误没有改变。

尝试执行 3.bundle update。

由於正常運行,可能存在於gem上的問題。
由於除了本次修復範圍之外還會產生較大的影響,因此避免進行gem的全部更新,選擇先回復原狀並尋找原因。


尝试更新 Redis-Rack 版本。

更新redis-rack软件包

管理画面显示正常,但是测试失败了。

NoMethodError:
  undefined method `private_id' for "xxxxxxxxxxxxxxx":String
  Did you mean?  private_methods

尝试更新 redis-actionpack。

在执行了上述的redis-rack更新之后,
请参考这篇文章
https://github.com/redis-store/redis-rack/pull/50#issuecomment-567649953
进行bundle update redis-actionpack。

在服务器重新启动之后,解决了Sidekiq管理界面的500错误,并且测试也通过了。

总结

问题已经通过redis-rack和redis-actionpack的更新得到解决。

广告
将在 10 秒后关闭
bannerAds