RailsのAssetsでEncoding::InvalidByteSequenceErrorが消えなかった

Encoding::InvalidByteSequenceError

先日、既存のシステムを外部仕様そのままにRails化する案件がありました。(Railsのバージョンは5.1)

最初の段階として、現行サイトのHTMLをERB化し、JavaScriptとCSSは既存のものをそのまま使うことにしました。
なお、JSとCSSはいろんな箇所で読み込まれており、順番を変えると挙動が変になったため、config/initializers/assets.rbRails.application.config.assets.precompileに指定して個別に読み込むようにしました。

その他諸々の準備を終えて./bin/rails sでサーバーを起動。さてこれでとりあえずは今までどおりの見た目で動くはず…!

Encoding::InvalidByteSequenceError

ブラウザで見てみると、上記のようにエンコーディングのエラーが発生。
元が古いシステムなのでここまでは想定内。該当のファイルの文字コードをUTF-8に変換。

しかし、文字コードを修正しても、再度同じ箇所でエラーが発生。
そのファイルを消しても、中身を空にしても、springを止めても、tmp/cache/assetsを消しても、サーバーを再起動しても解消せず。

数分間悩んだ結果、Rails.application.config.assets.precompileに指定したファイルの中で1つでも問題が発生していると、全ファイルが読み込めなくなる、というオチでした。

今回はEUCのJSファイルがあり、それが原因でエラーが発生していました。(CSSも読めなくなる)

めでたしめでたし。

TimeCrowdに戻る