ActionView::Template::Error (Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. のエラー
少し長いエラーメッセージですが。。
Macで開発したアプリケーションがローカルでは動いていたのに、
Herokuへdeploy後、動かなくなることがありました。
そこでいつものように、heroku logsでログを確認したところ、
ActionView::Template::Error (Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
のエラーが。。「JavaScriptを実行するためのランタイムがありませんよ。」と言われています。
当然と言えば当然で、開発しているMac端末では初期出荷状態でJavaScriptを実行出来る環境が整っていますが、
Heroku側は、JavaScriptを実行するための何かしらのランタイムが必要となるわけです。
(MacにはJavaScriptCoreが初期セットアップされています。)
調査した結果、Heroku側のJavaScriptエンジンとして無難そうな「therubyracer」を使うことにしました。
(今勉強中のCedar Stackを使えば済むんでしょうが、いまいち移行方法が分からず。。)
ローカルで開発しているアプリケーションのgemfileへ
gem 'therubyracer'
を追加後、bundle installコマンドを実行します。
bundle install vendor/bundle
※個人的に最近は「vendor/bundle」と付けるようにしています。
ここまでで、エラーが出なければ、後はいつもの流れですね。
最終的にHerokuへpushします。
どうでしょう?エラーが解消されるはずです。
↓下記の情報が役に立ちました。
https://github.com/sstephenson/execjs/issues/39
※Herokuでは、「therubyracer」非推奨という情報もありましたので、
早めにCedar Stackへ移行したいと思います。