/ #rails #node 

`ExecJS::RuntimeUnavailable` エラーは EXECJS_RUNTIME=Disabled で回避できるときがある

ExecJS::RuntimeUnavailable で ググってもあまり出てこなかったので書いておく。

railsコマンドやrakeコマンドで、ExecJS::RuntimeUnavailable エラーが起きてしまうことがある。

普通はあんまり起きないんだけど、railsアプリで、以下のようなケース。

  • dockerのmulti-stageビルドを駆使していてダイエットしていて、最終的に出来上がるdockerイメージに nodejs (とか)が無い
  • execjs gem を利用している
    • 例えば、autoprefixer-rails gem や、それに依存してる bootstrap (twitter bootstrap) gemを使っている

( productionでbootstrap gemを使わなきゃいいだろ、と言われそうだが、bootstrap gemに依存してるgemがあってな…..😂)

回避策

nodejs とかを入れる、のがまあ回避策になるんだけど、

環境変数 EXECJS_RUNTIMEDisabled を入れることで回避できることを知った。

もちろん、rake assets:precompile とかを走らせるときはダメだと思う。 その場合は普通に nodejs とかを入れる。

execjs gemに そういうクラスがある

Nullオブジェクトパターンってこういうパターンだっけかな

Author

hoshinotsuyoshi

星野剛志(ほしのつよし) web application engineer. ruby/rails/docker