Windows 8 で ExecJS::RuntimeError が出たときは
2013/01/08
この記事は『改訂新版 基礎Ruby on Rails』の読者サポートのために書かれたものです。
読者サポートページに戻る
類似の症状として「ExecJS::ProgramError: TypeError: オブジェクトでサポートされていないプロパティまたはメソッドです。」というエラーが出る場合があります。このエラーの対処法についてはWindows で ExecJS::ProgramError が出たときはこう直すをご覧ください。
Windows 8で書籍に従って作業を進めると、31ページで「ExecJS::RuntimeError in Top#index」というエラーに遭遇する可能性があります。
この場合は、以下の手順で execjs のソースコードを書き換えると問題が解消します。
- コマンドプロンプトを開き、
C:¥rails¥asagaoフォルダに移動します。 bundle show execjsコマンドを実行し、execjsがインストールされたフォルダのパスを調べます。C:/Ruby193/lib/ruby/gems/1.9.1/gems/exejs-2.0.1あるいはC:/Ruby200/lib/ruby/gems/2.0.0/gems/exejs-2.0.1のように表示されます。2.0.1の部分は環境により異なります。- Windows のエクスプローラで
execjsのインストールフォルダからlib→execjsとサブフォルダを開きます。 runtimes.rbのバックアップを取ります。※ 単数形のruntime.rbというファイルと間違えないでください- 適当なテキストエディタで
runtimes.rbを開き、次のように書き換えます。
書き換え前: (execjs-2.0.2 の場合は41-46行目)
JScript = ExternalRuntime.new(
:name => "JScript",
:command => "cscript //E:jscript //Nologo //U",
:runner_path => ExecJS.root + "/support/jscript_runner.js",
:encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE
)
書き換え後:
JScript = ExternalRuntime.new(
:name => "JScript",
:command => "cscript //E:jscript //Nologo",
:runner_path => ExecJS.root + "/support/jscript_runner.js",
:encoding => 'UTF-8'
)
変更箇所:
- 3行目の
//Uを削除。 - 5行目の
UTF-16LEをUTF-8に変更。コメントを削除。
asagao アプリケーションを起動し直してから、動作確認してください。
64bit 版の Windows をお使いの方は、64bit 版の Windows で画面が真っ白になる場合(sqlite3 の問題)も合わせてお読みください。
[更新] 従来は node.js をインストールするようにお勧めしていましたが、stackoverflow への投稿により、execjs のソースコードを書き換える方法を採用しました。(2013/09/14)
[更新] Stackoverflow の投稿が更新されたのを受けて、3行目の //U を削除するように変更しました。また、5行目の UTF-16LE を UTF-8 に修正することにしました。以前は UTF-16LE から LE を削除するという手順でした。(2013/12/18)
[更新] 別の記事「Windows で ExecJS::ProgramError が出たときはこう直す」を紹介する注釈を記事の冒頭に加えました。(2015/07/29)
