ExecJS::RuntimeError on Windows trying to follow rubytutoria



更新:Colin删除行//=require_tree的建议。已解决该问题。

我花了两天多的时间试图遵循每一个建议并解决我的问题。我正在努力遵循http://ruby.railstutorial.org在windows机器上看书,我一辈子都无法克服以下严重错误。

ExecJS::RuntimeError in Static_pages#home
Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised:
["ok","(function() {nnnn}).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,使用execjs1.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() {nnnn}).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,并尝试了各种各样的宝石,但请建议可以帮助我在windows上开发的更改。我什么都用rubyinstaller。

我错过了什么?

几个月前,我的朋友在尝试Win 8 RTM上的Rails教程时遇到了这个错误。不确定Windows7中是否也存在此问题,但这可能会有所帮助。

选项:

1)删除//= require_tree ./忽略问题-正如ColinR上面所说,这一行一开始就不应该引起问题。ExecJS在系统上正确使用JavaScript运行时存在实际问题,删除此行只是忽略了这一事实。

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时关闭了多少网页才是公认的解决方案。我们一直在寻找的唯一原因是,我们无法相信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并继续搜索。让我们知道什么最终对你有效。。除非删除requiretree或安装node.js,否则已经有很多了。:)

也有同样的问题操作系统-Windows 8错误-"ExecJS::RuntimeError…"解决方案-缺少Node.js

  1. 从安装Node.jshttp://www.nodejs.org/download/
  2. 重新启动计算机

我遇到了这个问题,正在搜索互联网,我正在运行带有这个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/安装-重新启动机器,一切正常。

我喜欢学习路线。问题似乎源于

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

execjsexternal_runtine.rb中返回一个空字符串(版本1.4.0中的第173行)。这就是错误消息不包含文本的原因。建议的更改对我不起作用。我将UTF-16LE更改为UTF-8,但它仍然返回一个空字符串。我从command中删除了\U——这至少返回了文本,但它的编码错误——在浏览器中,它显示为汉字。

根据MSDN的这篇博客文章,使用//U标志并重定向到文件会导致cscript使用UTF-16返回结果。

然后,神奇的是,它使用command作为"cscript //E:jscript //Nologo"encoding作为"UTF-8"工作(@#%$amp;^@$%!!?!)。哦,好吧。

我不得不将nodejs文件夹添加到我的Windows Path环境变量中。在Windows 8中,打开"控制面板",转到"系统"、"高级系统设置"(左侧),单击左侧的"环境变量",然后编辑"路径"变量以将目录包含在nodejs文件夹中(可能在Program Files中)。

当然,你必须安装Node.js(使用Windows安装程序),并通过NPM安装CoffeeScript。

我知道这是对这个问题的一个很晚的回答,但我做了类似的事情,并深入了解了问题的真正原因。

事实证明,默认的windows jscript引擎仍然在es3上,许多gem正在利用es5或es6的功能。不幸的是,如果发生这种情况(您使用的是一个gem或一段利用es5或es6功能的代码),就没有办法让它在带有本地js引擎的窗口上工作。

这就是安装node.js解决问题的原因(node至少是es5)。

希望这能帮助一些正在处理jsexec运行时错误的人。

我的2美分建议是安装node(非常简单)或安装v8,而不是删除//=require_tree。

注意,如果检测到execjs,它将自动使用node。否则,强制使用它,在引导中添加类似的内容:

ENV['EXECJS_RUNTIME'] = 'Node'

将env设置为节点。

对于windows用户来说,这可能会起作用。在windows上运行coffee脚本源代码>1.9.0时出现问题。

看来你必须把这个添加到你的gemfile中:

gem"咖啡脚本源","1.8.0">

然后进行

捆绑包更新咖啡脚本源

我尝试了以上所有选项,也混淆了它们的一些组合,直到我在Pages#welcome中找到了这个Rails-4,ExecJS::ProgramError,并进行了多次系统宝石更新和捆绑安装和更新。

我恢复了所有的试用版,并降级了我的咖啡脚本源,它起作用了。在这里发帖是为了帮助其他可能有类似问题的人。

更新供应商/缓存中的文件

coffee-script-source-1.8.0.gem从供应商/缓存中删除过时的.gem文件coffee-script-source-1.9.1.1.gem捆绑包已更新!

对于像我这样的初学者:

  1. 导航到\app\views\layouts\application.html.erb
  2. 从更改第6行

    '<%=javascript_include_tag"应用程序","数据涡轮链接跟踪"=>true%>'

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

来源于教程修复这里

快速而肮脏的解决方案:从application.js中删除//= require_tree .

正如我在问题评论中解释的那样,这实际上并不能解决导致错误的根本问题,而只是回避了它

我使用了解决方案编号2,因为以前我有这个错误,但在这个位置不起作用,然后我添加了

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

并运行

bundle install

我的问题解决了

对于初学者来说,这里有一个不那么复杂的解决方案:

如果您只是在学习教程,那么您可能正在使用默认的Gemfile(或者非常接近)。你可以在文本编辑器中打开它,并删除此行前面的磅号:

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

您需要重新运行bundle install,它可能会下载一些东西。但一旦启动,您应该能够毫无问题地启动服务器。

至少,这对我有效。

顺便说一句,这也适用于Ubuntu 12.04。

运行Win 8 64位轨道4.2.5ruby 2.1.7

这个对我有用

您是否将代码的位置从C:\Users\this-user\yo-app更改?

当我年轻的时候,我创建了一个应用程序,我的应用程序的默认位置是C:\Users\Duncan\my app,然后,当我更改应用程序并将其放在D:\All my Apps文件夹中时,我出现了错误。。。。

我挠了挠头,试了1、2、3和更多。。。。。没有什么直到我将所有代码返回到默认文件夹位置,令我惊讶的是,我又开始滚动了:)

万一有人觉得这很有用(我无法解释为什么会发生这种情况,也许有人可能没有猜测)

最新更新