読者です 読者をやめる 読者になる 読者になる

文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

Encoding::CompatibilityError の対処方法と cannot load such file -- 2.2/gherkin_lexer_en

rubyのバージョンを上げて以来、Encoding::CompatibilityError というエラーが発生。

Encoding::CompatibilityError は互換性のない文字列連結などで発生するらしい。

けど、ソースいじってないし実行マシンの設定も変えてない。


実行時のログを見てみると
WARNING: cannot load such file -- 2.3/gherkin_lexer_en


"cannot load such file" 再び。
今度は「gherkin_lexer_en」ってのが見つからないよって言われた。

なんだこのファイルは。GENKINGと空目してしまう。
調べたらfeatureファイルの書式の1つに「Gherkin 書式」というものがあるそう。


このファイルが読めてないせいで、エンコーディングがうまくいかずにエラーになってるっぽい。




下記ページに対処方法が載っている
watir - cucumber Couldn't load 2.1/gherkin_lexer_en - Stack Overflow



対処方法

1.gherkin 2.12.2 をインストールする
2.c_lexer.rbのprefix = の部分を置き換える

  ・ファイルの場所
  例)version2.3.0の場合
  C:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\gherkin-2.12.2-x86-mingw32\lib\gherkin

  ・元々書いてある以下をコメントアウトして、
  prefix = RbConfig::CONFIG['arch'] =~ /mswin|mingw/ ? "#{RbConfig::CONFIG['MAJOR']}.#{RbConfig::CONFIG['MINOR']}/" : ''

  ・以下を追記
  prefix = ''



注意点

※ 上記対応は動かしているrubyのバージョンのファイルに対して行います。

インストールしたrubyディレクトリ以下それぞれにファイルが作られているため。。

これは2.2系
f:id:ron623:20160714100959p:plain

これは2.3系
f:id:ron623:20160714101008p:plain

関連:rubyの最新バージョンをインストールするとろくなことがない (cannot load such file -- ffi_c (LoadError)) - 文系seの備忘録


ただし・・・
・バージョンアップするごとに毎回書き換えるのが面倒
・別の環境で実行したときにわざわざ書き換えなきゃいけないのは面倒
という問題があるかと思います。
その場合は実行時にcopyコマンドでファイルごと上書きするよう設定しておくと良いと思います。

例) バグ対応パッチをどこかにおいておいて、それを2.3系にコピーする
copy /Y xxx\c_lexer.rb C:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\gherkin-2.12.2-x86-mingw32\lib\gherkin\c_lexer.rb
※ 別のrubyバージョンを使うときにはcopy先のフォルダを変更すればOKです




再度実行してみたところ、Encoding::CompatibilityError は消えました。