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)