【Rails】プリコンパイルがこける

プログラミング

ポイント

  • 本番環境にdeployしても、変更内容が適用されていない!となった
  • 初めはエラーに気づかず、なんで変更部分が反映しないのか小一時間、悩んでいた
  • 再度、本番環境で assets をコンパイルしたところエラーが発生していた

環境

  • Ruby 2.6.3
  • Rails 4.2.0
  • CentOS 6.4

エラー内容

rake assets:precompile RAILS_ENV=production

rake aborted!
ExecJS::RuntimeError: SyntaxError: Unexpected token: ~~~
/railspath/app/assets/config/manifest.js:2
JS_Parse_Error.Object.defineProperty.get ((execjs):3538:621)

Caused by:
V8::Error: Unexpected token: ~~~
at js_error (<eval>:3623:12181)
at croak (<eval>:3623:21897)
at token_error (<eval>:3623:22034)
at unexpected (<eval>:3623:22122)
at semicolon (<eval>:3623:22614)
at simple_statement (<eval>:3623:25718)
at <eval>:3623:23580
at <eval>:3623:22787
at <eval>:3624:3503
at parse (<eval>:3624:3743)
at parse (<eval>:3959:22)
at uglifier (<eval>:4007:13)
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

どうやら、ES6に基づいて書いた部分はコンパイルできないらしい
ローカルではうまくいっていたのは uglifier でコンパイルしていなかったからだろう

解決策

# config/environments/production.rb
config.assets.js_compressor = :uglifier
↓
config.assets.js_compressor = Uglifier.new(harmony: true)

上記修正し、再度プリコンパイルしたところ、正常に動作することを確認

まとめ

  • ログはちゃんと見よう!(当たり前)
  • ES6くらいデフォルトで対応してくれ

参考

Uglifier::Error: Unexpected token: punc ((). To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true) · Issue #127 · lautis/uglifier
Hi, When I run "rake assets:precompile RAILS_ENV=production" command, I have issue. rake assets:precompile RAILS_ENV=production rake aborted! Uglifier...

コメント

タイトルとURLをコピーしました