<解決済み>RailsのAction Cableをh2oで運用していてChromeでエラーが発生したときの対応
SCDB JAPANにはEmotionという機能があり、法人に対する感情表現をすることが出来ます。 この機能は、Rails5から導入されたAction Cableを使って実装しているのですが、先日ChromeのConsoleにエラーメッセージが出ていることに気が付きました。
WebSocket connection to 'wss://scdb.jp/cable' failed: Error during WebSocket handshake: 'Upgrade' header must not appear more than once in a response
確かにcableのHTTPヘッダーにUpgradeヘッダーが複数回表示されていました。 画面キャプチャ取り忘れました。。
HTTPヘッダーの確認方法は下の解決後の画面キャプチャをご覧ください。
H2Oサーバを2.2.3以上にバージョンアップすることで解決
対応方法を探していると、やはりここにも偉大な先人がいらっしゃいました。
H2Oの開発者であるkazuhoさんがコメントしておられます。 どうやらH2Oサーバのバグということで、2.2.3で解決しているそうです。
H2Oのバージョンを確認する
$ sudo yum list installed | grep h2o h2o.x86_64 2.2.2-1.el7 @bintray-tatsushid-h2o-rpm
私が使っているH2Oは2.2.2でした。 これはバージョンアップによる解決に期待が持てそうです。
バージョンアップできるバージョンの確認
$ sudo yum list check-update | grep h2o h2o.x86_64 2.2.4-1.el7 bintray-tatsushid-h2o-rpm
既に2.2.4が利用できるようです。
H2Oのバージョンアップ
$ sudo yum update h2o 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ h2o.x86_64 0:2.2.2-1.el7 を 更新 ---> パッケージ h2o.x86_64 0:2.2.4-1.el7 を アップデート --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ 更新します: h2o x86_64 2.2.4-1.el7 bintray-tatsushid-h2o-rpm 2.6 M トランザクションの要約 ================================================================================ 更新 1 パッケージ 総ダウンロード容量: 2.6 M Is this ok [y/d/N]: y Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. h2o-2.2.4-1.el7.x86_64.rpm 0% [ ] 0.0 B/s | 0 B --:-- ETA h2o-2.2.4-1.el7.x86_64.rpm | 2.6 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction 更新します : h2o-2.2.4-1.el7.x86_64 [ ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [# ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [## ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [#### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [##### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [###### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [####### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [######## ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [######### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [########## ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [########### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [############ ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [############# ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [############## ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [############### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [################ ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [################# ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [################## ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [################### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [#################### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 [##################### ] 1/2 更新します : h2o-2.2.4-1.el7.x86_64 1/2 整理中 : h2o-2.2.2-1.el7.x86_64 2/2 検証中 : h2o-2.2.4-1.el7.x86_64 1/2 検証中 : h2o-2.2.2-1.el7.x86_64 2/2 更新: h2o.x86_64 0:2.2.4-1.el7 完了しました!
H2Oサービスの再起動
$ sudo systemctl restart h2o.service
改めてChromeを確認
<Console> エラーが出なくなりました!
<HTTPヘッダー>
ヘッダーの重複がなくなりました!!
※ バージョンアップ前はResponse Headersのupgrade: websocket
が2行出ていました。
これまでたまに、Action Cableが不安定だと思うことがありましたが、そっちもこれで改善されるかどうか、しばらく状況を見守りたいと思います。