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

ActionView::Template::Error (Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. のエラー

Ruby Rails

少し長いエラーメッセージですが。。
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へ移行したいと思います。