WindowsでのExecJS :: RuntimeErrorがrubytutorialを追跡しよう


103

更新: // = require_treeという行を削除するというColinの提案。問題を修正しました。

私はそこにあるすべての提案に従って、私の問題を修正しようとするために2日間以上無駄にしてきました。私はWindowsマシンでhttp://ruby.railstutorial.orgの本をフォローしようとしていますが、私の人生では次の厄介なエラーを乗り越えることができません。

ExecJS::RuntimeError in Static_pages#home

Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised:

["ok","(function() {\n\n\n\n}).call(this);\n"]
(in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)
Extracted source (around line #6):

3: <head>
4:   <title><%= full_title(yield(:title)) %></title>
5:   <%= stylesheet_link_tag    "application", media: "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8:   <%= render 'layouts/shim' %>
9: </head>
Rails.root: C:/Users/.../bootcamp-sample-app

Application Trace | Framework Trace | Full Trace
app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'
Request

私は、msiでのnodejsのインストール、execjs 1.3.0やその他覚えられないものの使用など、あらゆる提案を試みました。これがgemファイルです

source 'https://rubygems.org'

gem 'rails', '3.2.8'
gem 'bootstrap-sass', '2.0.0'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.0.1'
gem 'will_paginate', '3.0.3'
gem 'bootstrap-will_paginate', '0.0.6'

group :development, :test do
  gem 'sqlite3', '1.3.5'
  gem 'rspec-rails', '2.10.0'
  gem 'guard-rspec', '0.5.5'
  gem 'guard-cucumber'
end

group :development do
  gem 'annotate', '2.5.0'
end


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'coffee-script'
  gem 'uglifier'
end

gem 'jquery-rails', '2.0.2'

gem 'execjs'

# Gems on Linus/Mac
#gem 'therubyracer'


group :test do
  gem 'capybara', '1.1.2'
  gem 'guard-spork', '0.3.2'
  gem 'spork', '0.9.0'
  gem 'factory_girl_rails', '1.4.0'
  gem 'cucumber-rails', '1.2.1', require: false
  gem 'database_cleaner', '0.7.0'


# Test gems on Linux
#  gem 'rb-inotify', '0.8.8'
#  gem 'libnotify', '0.5.9'

# Test gems on Macintosh OS X
#  gem 'selenium-webdriver', '~> 2.22.0'
#  gem 'rb-fsevent', '0.9.1', :require => false
#  gem 'growl', '1.0.3'

# Test gems on Windows
# gem 'rb-fchange', '0.0.5'
# gem 'rb-notifu', '0.0.4'
# gem 'win32console', '1.3.0'
end

group :production do
#  gem 'therubyracer'
  gem 'pg', '0.12.2'
end

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
#gem 'debugger''

そして、これがsessions.js.coffeeです

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

application.js

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_tree .
//= require bootstrap

application.html.erb

<!DOCTYPE html>
 <html>
 <head>
   <title><%= full_title(yield(:title)) %></title>
   <%= stylesheet_link_tag    "application", media: "all" %>
   <%= javascript_include_tag "application" %>
   <%= csrf_meta_tags %>
   <%= render 'layouts/shim' %>
 </head>
 <body>
 <%= render 'layouts/header' %>
 <div class="container">
   <%= yield %>
   <%= render 'layouts/footer' %>
 </div>
 </body>
 </html>

ここにコンソールのコンテンツがあります

Processing by StaticPagesController#home as HTML
  Rendered static_pages/home.html.erb within layouts/application (45.0ms)
Completed 500 Internal Server Error in 1136ms

ActionView::Template::Error (["ok","(function() {\n\n\n\n}).call(this);\n"]
  (in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)):
    3: <head>
    4:   <title><%= full_title(yield(:title)) %></title>
    5:   <%= stylesheet_link_tag    "application", media: "all" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8:   <%= render 'layouts/shim' %>
    9: </head>
  app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'


  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (34.0ms)

Devkitをインストールし、さまざまなgemを試しましたが、Windowsでの開発に役立つ変更を提案してください。すべてにrubyinstallerを使用しました。

何が欠けていますか?


5
//= require_tree .から行を削除してみてapplication.js、エラーが続くかどうかを確認してください。
コリンR

WOW ....これでうまくいきました... Colinに感謝し、// = require_treeという行を削除しました。問題を修正しました。どのような救済であるかを説明することはできませんが、その行がエラーの原因である理由を説明できますか?
user1687078 2012

3
この行は、すべての.js.coffeeファイルapp/assets/javascriptsをJavaScriptにコンパイルしてからレイアウトに追加しています(ただし、開発モードのみ。プロダクションモードでは、コンパイルされたjsがapplication.jsファイルに追加されます)。持っrequire_tree .エラーが発生してはならないので、何とかあなたは含まれていたファイルのいずれかで問題を持っています。app/assets/javascriptsディレクトリ内のすべてのファイルのリストを投稿できますか?また、コンテンツを完全に削除してsessions.js.coffee追加し直し//= require_tree .、エラーがまだ存在するかどうかを確認することもできます。
コリンR

1
@ColinR、これを質問への回答として追加する必要があります。同じ問題があり、コメントを参照していなければ、別の質問を探し続けていたでしょう。
Emmanuel F

回答:


242

私の友人は、数か月前にWin 8 RTMでRailsチュートリアルをしようとしていて、このエラーに遭遇しました。この問題がWindows 7にも存在するかどうかはわかりませんが、解決する場合があります。

オプション:

1)//= require_tree .問題の削除 /無視 -ColinRが前述したように、この行は最初から問題を引き起こしていないはずです。システム上のJavaScriptランタイムでExecJSが適切に動作するという実際の問題があり、この行を削除してもその事実は無視されます。

2)Node.jsのインストール/逃げる- 多くの人は、Node.jsをインストールして、システムにすでに存在するJavaScriptランタイムの代わりにそれを使用するだけのようです。これは有効なオプションですが、追加のソフトウェアも必要であり、ExecJSが既にシステム上にあるJavaScriptランタイムで適切に動作していないという元の問題を回避するだけです。システム上の既存のJavaScriptランタイムが機能すると思われる場合は、ソフトウェアを追加インストールする代わりに、それを機能させてみませんか?ExecJSの作成者によると、すでにWindowsに組み込まれているランタイムは実際にサポートされています...

ExecJSを使用すると、RubyからJavaScriptコードを実行できます。JavaScriptプログラムの評価に使用できる最適なランタイムが自動的に選択され、その結果がRubyオブジェクトとして返されます。

ExecJSは次のランタイムをサポートしています。

  • therubyracer-Rubyに埋め込まれたGoogle V8
  • therubyrhino-JRubyに組み込まれたMozilla Rhino
  • Node.js
  • Apple JavaScriptCore-Mac OS Xに含まれています
  • Microsoft Windowsスクリプトホスト(JScript)

(github.com/sstephenson/execjs#execjsから)

3)実際に問題を修正する/学習-オプション1と2の知識を使用して、他の解決策を検索します。私たちが抱えていた根本的な問題についての情報を実際に見つける前に、オプション1または2が受け入れられた解決策だったときに閉じたWebページの数はわかりません。私たちが探し続けた唯一の理由は、Railsチームが(1)問題を引き起こしたすべての足場生成プロジェクトにコード行を挿入すること、または(2)そのデフォルトを実行するために追加のソフトウェアをインストールすることを要求することを信じられなかったことですコードの行。そして、最終的に根本的な問題の修正にたどり着きました(マイルは異なる場合があります)。

うまくいった修正: 問題のあるシステムで、ExecJSのruntimes.rbファイルを見つけます。このように見えます。見つかったファイルのコピーをバックアップ用に作成します。編集のために元のruntimes.rbを開きます。行で始まるセクションを見つけますJScript = ExternalRuntime.new(。そのセクションで、次を含む行に:command => "cscript //E:jscript //Nologo //U",- //Uのみを削除します。次に、次を含む行で:encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE-UTF-16LEをに変更しUTF-8ます。変更をファイルに保存します。ファイルのこのセクションは次のようになります。

JScript = ExternalRuntime.new(
    :name        => "JScript",
    :command     => "cscript //E:jscript //Nologo",
    :runner_path => ExecJS.root + "/support/jscript_runner.js",
    :encoding    => 'UTF-8' # CScript with //U returns UTF-16LE
)

次に、Railsサーバーを停止して再起動し、元のエラーが発生したブラウザーのページを更新します。うまくいけば、ページはエラーなしでロードされます。結果が最初に投稿されたExecJSの問題のスレッドは次のとおりです。https//github.com/sstephenson/execjs/issues/81#issuecomment-9892952

これで問題が解決しなかった場合は、変更したruntimes.rbを(できれば)作成したバックアップコピーでいつでも上書きでき、すべてが元の状態に戻ります。その場合は、オプション3を検討して検索を続けます。最終的に何が機能するかをお知らせください。require_treeを削除したり、node.jsをインストールしたりしない限り、すでに多くの問題が解決されています。:)


20
私はあなたに+50票を与えることができるといいのですが。これは、Windows用のrubyracerを起動しようとして、サポートされていないことに気づき、ExecJSを適切にロードしようとするのに、長い間私を苛立たせてきました。問題をわかりやすくするため、時間を割いていただきありがとうございます。「gem which execjs」と入力すると、runtimes.rbファイルの場所を取得できます
Michael

4
この変更を行った後、機能するためにバンドルインストールを実行する必要がありました。したがって、誰かがこのソリューションを試してみて、最初はうまくいかないようであれば、必ず試してみてください!私は64ビットのWindows 8を使用していますが、うまくいきました!ありがとう
Peter Kirby

2
+1はノードのインストールからの煩わしさを救いました。オプションウィンドウ上の私のための3つの作品8 64ビット
サミ

10
オプション3に関するコメント:github.com/sstephenson/execjs/issues/111は、オプションを削除せずにに変更UTF-16LEするだけで問題を解決できると述べてUTF-16//Uます。確認しました。
Tsutomu

3
私は多くの方法を見ていますが、多くの理由ではありません。文字セットのように見えるものを変更すると、Windowsだけで違いが生じるのはなぜですか?全部知りたいです。
NathanTempelman 2014年

14

同じ問題がありましたOS-Windows 8エラー-'ExecJS :: RuntimeError ...'解決策-Node.jsがありません

  1. Node.jsをhttp://www.nodejs.org/download/からインストールします。
  2. コンピュータを再起動します

1
これは私のために働いた。node.jsのインストールが機能した理由を知っている人はいますか?
mpalencia 2017年

12

私はこの問題を抱えていて、このRails gemファイルでWindows 8を実行しているインターネットに電力を供給していました

source 'https://rubygems.org'

gem 'rails', '3.2.9'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

group :development do gem 'sqlite3', '1.3.5' 
end

# Gems used only for assets and not required # in production environments by default. 

group :assets do 
    gem 'sass-rails', '3.2.5' 
    gem 'coffee-rails', '3.2.2'

gem 'uglifier', '1.2.3' 
end

gem 'jquery-rails', '2.0.2'

group :production do 
    gem 'pg', '0.12.2' 
end

インストールされたhttp://nodejs.org/download/に行きました-マシンを再起動し、すべてが機能しました。


私が示唆したように、ちょうど新しいCMDウィンドウを開きます(これは新しいパスにアクセスできるようにだと思います)、再起動する必要はありませんでしたノードを設置
ウィル

5

私は学習ルートを支持しました。問題の原因は

IO.popen(command, options) { |f| output = f.read }

空の文字列を返しますexecjs\external_runtine.rb(バージョン1.4.0の行173)。これが、エラーメッセージにテキストが含まれていない理由です。提案された変更は私にとってはうまくいきませんでした。に変更UTF-16LEしましたUTF-8が、それでも空の文字列が返されました。から削除\\Uしましたcommand -これは少なくとも返されたテキストですが、エンコードが間違っていました-ブラウザーでは中国語の文字として表示されました。

このMSDNブログの投稿によると、//Uフラグを使用してファイルにリダイレクトすると、を使用しcscriptて結果が返されますUTF-16

そして、魔法のように、それはas およびas を使用して機能しました(@#%$&^ @ $%!!!?!?!)。しかたがない。command"cscript //E:jscript //Nologo"encoding"UTF-8"


4

nodejsフォルダーをWindowsパス環境変数に追加する必要がありました。Windows 8でコントロールパネルを開き、[システム]、[システムの詳細設定](左側)に移動し、左側の[環境変数]をクリックして、Path変数を編集し、nodejsフォルダーへのディレクトリを含めます(おそらくProgram Filesにあります)。

もちろん、Node.jsをインストールし(Windowsインストーラーを使用)、NPMを介してCoffeeScriptをインストールする必要があります


4

これはこの問題に対する非常に遅い回答であることはわかっていますが、同様の問題に直面し、何が本当に問題を引き起こしているかを理解するために完全な道を進みました。

デフォルトのWindows jscriptエンジンはまだes3にあり、多くのgemがes5またはes6機能を利用していることがわかりました。残念ながら、これが発生した場合(es5またはes6の機能を利用するgemまたはコードの一部を使用している場合)、ネイティブのjsエンジンを使用してWindowsで機能させる方法はありません。

これが、node.jsをインストールすると問題が解決する理由です(ノードは少なくともes5です)。

これがjsexecの実行時エラーで苦労している一部の人々に役立つことを願っています。

私の2セントのアドバイスは、// = require_treeを削除せずに、ノードをインストールする(非常に簡単)またはv8をインストールすることです。

execjsは、検出された場合、ノードを自動的に使用することに注意してください。それ以外の場合は強制的に使用し、ブートに次のようなものを追加します。

ENV['EXECJS_RUNTIME'] = 'Node'

envをnodeに設定します。


ノードをインストールすることは良いアイデアです(そしておそらく最も簡単です)が、そのサイズを考えると、少々やり過ぎです
prusswan '27

4

Windowsユーザーの場合、これでうまくいくかもしれません。Windowsで動作しているcoffee-script-source> 1.9.0に問題があります。

これをgemfileに追加する必要があるようです:

gem 'coffee-script-source'、 '1.8.0'

それから

バンドルupdate coffee-script-source

上記のすべてのオプションを試してみましたが、Pages#welcomeにこのRails-4、ExecJS :: ProgramErrorが見つかるまで、それらのいくつかの組み合わせを混合しました複数のシステムgemの更新とバンドルのインストールと更新が行われる。

私はすべての試用版を元に戻し、coffee-script-sourceをダウングレードしましたが、うまくいきました。同様の問題を抱えている可能性がある人を助けるためにここに投稿する。

ベンダー/キャッシュ内のファイルの更新

coffee-script-source-1.8.0.gemベンダー/キャッシュから古い.gemファイルを削除するcoffee-script-source-1.9.1.1.gemバンドルが更新されました!


私は受け入れられた答えのオプション3を試し、「引数エラー」を受け取り、nodejsをインストールしようとしましたが、助けにはならず、nodejsをパス変数に追加し(私はWin10を使用しています)、最後にあなたのアプローチを試みました。働きました!おかげで
エルク

3

私のような初心者のために:

  1. \ app \ views \ layouts \ application.html.erbに移動します
  2. 6行目を次のように変更します。

    '<%= javascript_include_tag' application '、' data-turbolinks-track '=> true%>'

<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>

ここで修正するチュートリアルのソース


鉱山は私が両方の行を入れたときにうまくいきます:<%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> ありがとうLeandro P.
rld

1
これを行わないでください。Railsアプリ内のすべてのJavascriptが削除されるだけです。これは問題を隠しますが、後で他の人を引き起こすでしょう。
mattangriffel

ええ、@ mattangriffelが言うように、これを行わないでください。
Neil Atkinson

2

すばやく汚れた解決策://= require_tree .から削除しapplication.jsます。

質問のコメントで説明したように、これは実際にはエラーの原因となっている根本的な問題を解決するのではなく、単に回避するだけです。


こんにちは、コリンRさん、助けが必要です。<%= stylesheet_link_tag 'application'、media: 'all'、 'data-turbolinks-track' => true%>を削除するだけで5行目でエラーが発生した場合、このコード行で問題が修正されました。ただし、ブートストラップはWebページに適用されません。* = require_treeも削除します。application.css.sassが機能していません。私の友人のシステムにはWindows 7 32ビット、nodejsがインストールされていません。あなたが提案していない方法3も機能しない。私の場合、jsは問題ないと思います。エラーを防ぐ方法はありますか?
学習者

Node.jsもインストールし、npmのパスを環境変数に設定しました。まだ同じエラー。私はWindows 8.1 64bit OSでアプリケーションを開発していますが、同じgemが使用されています。
学習者

2

以前にこの間違いがあったため、ソリューション番号2を使用しましたが、このオプションでは機能しませんでした。

gem 'coffee-script-source', '1.8.0'

そして走る

bundle install

そして私の問題は修正されました


ソリューション番号2を使用した場合、Node.jsをインストールした後、windnowsのすべてのコマンドラインをリロードする必要があります。次に、サーバーの電源を入れて再試行します。
Yuliem Alavez 2016年

1

初心者向けの、それほど複雑ではないソリューションを次に示します。

チュートリアルを実行しているだけの場合は、おそらくデフォルトのGemfile(またはほぼ同じ)を使用しています。テキストエディターで開き、この行の先頭からポンド記号を削除できます。

# gem 'therubyracer', :platforms => :ruby

を再実行する必要がありますbundle install。これにより、いくつかのものがダウンロードされる可能性があります。しかし、一度実行すれば、問題なくサーバーを起動できるはずです。

少なくとも、それでうまくいきました。

ちなみに、これはUbuntu 12.04でも機能します。



0

コードの場所をC:\ Users \ this-user \ yo-appから変更しましたか?

私がRailsで若かったとき、私はアプリを作成しました、そして私のアプリのデフォルトの場所はC:\ Users \ Duncan \ my-appでしたを変更してD:\ All-my-Appsに配置したとき-folder私はそのエラーがありました...

私は頭を掻いたり、1、2、3などを試したりした。すべてのコードをデフォルトのフォルダーの場所と驚きに戻すまで、私は再び転がっていました:)

誰かがこれが便利だと思うかもしれません(私はなぜそれが起こったのか説明できません、おそらく誰かが推測をしていません)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.