在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的更新得到解决。