<解決済み>RailsのAction Cableをh2oで運用していてChromeでエラーが発生したときの対応

SCDB JAPANにはEmotionという機能があり、法人に対する感情表現をすることが出来ます。 この機能は、Rails5から導入されたAction Cableを使って実装しているのですが、先日ChromeのConsoleにエラーメッセージが出ていることに気が付きました。

f:id:boost-up:20171218082440p:plain

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以上にバージョンアップすることで解決

対応方法を探していると、やはりここにも偉大な先人がいらっしゃいました。

github.com

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> エラーが出なくなりました! f:id:boost-up:20171218093535p:plain

<HTTPヘッダー> ヘッダーの重複がなくなりました!! ※ バージョンアップ前はResponse Headersのupgrade: websocketが2行出ていました。 f:id:boost-up:20171218093916p:plain

これまでたまに、Action Cableが不安定だと思うことがありましたが、そっちもこれで改善されるかどうか、しばらく状況を見守りたいと思います。