ExecJS::RuntimeError在Windows上尝试遵循rubytutorial

ExecJS::RuntimeError on Windows trying to follow rubytutorial

提问人:user1687078 提问时间:9/21/2012 最后编辑:Communityuser1687078 更新时间:8/25/2018 访问量:76287

问:

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

我浪费了 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''

这是会话.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/

应用程序.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进行所有操作。

我错过了什么?

JavaScript Ruby-on-Rails Ruby Windows 资产管道

评论

5赞 Colin R 9/21/2012
您可以尝试从中删除该行并查看错误是否仍然存在吗?//= require_tree .application.js
0赞 user1687078 9/21/2012
哇。。。。这成功了......非常感谢科林,删除了 //= require_tree 行。已解决该问题。我无法解释这是多么的解脱,但你能解释一下为什么那条线会导致错误吗?
3赞 Colin R 9/21/2012
那一行是将每个文件编译成 JavaScript,然后将其添加到您的布局中(但仅在开发模式下;在生产模式下,编译后的 js 会添加到您的文件中)。不应该导致错误,所以不知何故,你有一个文件有问题。你能发布你目录中所有文件的列表吗?此外,您可以尝试完全删除内容并重新添加,看看错误是否仍然存在。.js.coffeeapp/assets/javascriptsapplication.jsrequire_tree .app/assets/javascriptssessions.js.coffee//= require_tree .
1赞 Emmanuel F 11/11/2012
@ColinR,您应该将其添加为问题的答案。我有同样的问题,如果我没有浏览评论,我会继续寻找另一个问题。

答:

2赞 Colin R 11/30/2012 #1

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

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

评论

0赞 learner 2/26/2015
你好 Colin R,我需要帮助。如果错误发生在第 5 行,其中仅删除 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %怎么办>这行代码解决了这个问题。但是 bootstrap 不适用于网页。即使删除 *= require_tree .从应用程序.css.sass不起作用。我朋友的系统有Windows 7 32bit,nodejs未安装。即使您建议的方法 3 也不起作用。我认为就我而言,js没有问题。知道如何防止错误吗?
0赞 learner 2/26/2015
我还安装了 Node.js,并且在环境变量中设置了 npm 的路径。还是同样的错误。我正在 Windows 8.1 64 位操作系统中开发应用程序,并使用了相同的宝石。
12赞 gustavoanalytics 12/4/2012 #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/ - 重新启动机器,一切正常。

评论

0赞 Will 11/10/2015
我按照建议安装了节点,不需要重新启动,只需打开一个新的cmd窗口(猜猜这是为了可以访问新路径)
242赞 Kevin P 1/2/2013 #3

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

选项:

1) 删除 //= require_tree . / 忽略问题 - 如上所述,此行首先不应引起问题。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
  • 节点.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 进行编辑。找到以行开头的部分。在该部分中,在包含 - 删除 only 的行上。然后在包含 - 的行上将 UTF-16LE 更改为 .保存对文件所做的更改。该文件的这一部分现在应为:JScript = ExternalRuntime.new(:command => "cscript //E:jscript //Nologo //U",//U:encoding => 'UTF-16LE' # CScript with //U returns UTF-16LEUTF-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赞 Michael 3/4/2013
我希望我能给你 +50 票。这已经让我烦恼了太久,试图让 therubyracer 为 Windows 启动,意识到它不受支持,然后试图让 ExecJS 正确加载。感谢您抽出宝贵时间帮助我学习而不是混淆问题!对于那些想知道的人,您可以通过键入“gem which execjs”来获取 runtimes.rb 文件的位置
4赞 Peter Kirby 4/11/2013
在进行此更改后,我必须运行bundle install才能使其正常工作。因此,如果有人尝试过这个解决方案,但一开始似乎不起作用,请确保您尝试一下!我使用的是 Windows 8 64 位,它对我有用!谢谢
2赞 Sami 4/27/2013
+1 省去了安装节点的麻烦。选项 3 在 Windows 8 64 位上对我有用
10赞 Tsutomu 9/14/2013
对选项 3 的评论:github.com/sstephenson/execjs/issues/111 说我们可以通过更改为不重新移动选项来解决问题。我确认了。UTF-16LEUTF-16//U
3赞 NathanTempelman 6/4/2014
我看到了很多方法,但没有太多原因。为什么更改看起来像字符集的内容仅在 Windows 上就会有所不同?我很好奇。
4赞 Evan 1/23/2013 #4

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

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

1赞 Karl Giesing 6/4/2013 #5

对于初学者来说,这是一个不太复杂的解决方案:

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

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

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

至少,这对我有用。

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

14赞 snassr 6/20/2013 #6

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

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

评论

1赞 mpalencia 1/1/2017
这个对我有用。这里有人知道为什么安装 node.js 有效吗?
5赞 cofiem 6/29/2013 #7

我偏爱学习路线。问题似乎源于

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

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

根据这篇 MSDN 博客文章,使用标志并重定向到文件会导致使用 .//UcscriptUTF-16

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

4赞 Dinuz 1/21/2015 #8

我知道这个问题的答案很晚,但我遇到了类似的事情,并走上了完整的道路,以了解真正导致问题的原因。

事实证明,默认的 Windows jscript 引擎仍在 es3 上,许多 gem 正在利用 es5 或 es6 功能。 不幸的是,如果发生这种情况(您使用的是利用 es5 或 es6 功能的 gem 或一段代码),则无法让它在具有本机 js 引擎的 Windows 上运行。

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

希望这可以帮助一些在jsexec的运行时错误中挣扎的人。

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

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

ENV['EXECJS_RUNTIME'] = 'Node'

将 env 设置为 node。

评论

0赞 prusswan 8/27/2015
安装 node 是个好主意(而且可能是最简单的),但考虑到它的大小,它仍然有点矫枉过正
3赞 Leandro P. 7/24/2015 #9

对于像我这样的初学者:

  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 %>

源自教程以在此处修复

评论

0赞 rld 9/23/2016
当我把两行都放进去时,我的工作就行了:谢谢的 Leandro P。<%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %>
1赞 mattangriffel 10/16/2016
请不要这样做。它只会删除 Rails 应用程序中的所有 Javascript。这隐藏了问题,但以后会引起其他问题。
0赞 Neil Atkinson 11/18/2016
是的,正如@mattangriffel所说,不要这样做。
4赞 DJSampat 9/18/2015 #10

对于 Windows 用户,这可能有效。在 Windows 上运行的 coffee-script-source >1.9.0 存在问题。

看来您必须将其添加到您的 gemfile 中:

gem '咖啡脚本源', '1.8.0'

然后做

捆绑更新 coffee-script-source

我尝试了上述所有选项,并混合了它们的一些组合,直到我在 Pages#welcome 中找到这个 Rails-4、ExecJS::P rogramError,并且已经完成了多个系统 gem 更新和捆绑安装和更新。

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

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

coffee-script-source-1.8.0.gem 从 vendor/cache 中删除过时的 .gem 文件 coffee-script-source-1.9.1.1.gem 捆绑包已更新!

评论

0赞 elk 2/19/2017
我尝试了已接受答案的选项 3,然后收到“参数错误”,尝试安装 nodejs,没有帮助,将 nodejs 添加到路径变量(我在 Win10 上)最后尝试了您的方法。工作!谢谢
0赞 Sumit Kumar 11/18/2015 #11

运行 Win 8 64 位 轨道 4.2.5 红宝石 2.1.7

这个对我有用

2赞 Yuliem Alavez 4/14/2016 #12

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

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

并运行

bundle install

我的问题解决了

评论

0赞 Yuliem Alavez 5/4/2016
如果您使用了解决方案编号 2,则必须在安装 Node.js 后重新加载 windnows 中的所有 comman 行。然后打开服务器并重试。
0赞 dancun chiriga 2/15/2018 #13

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

当我年轻的时候,我创建了一个应用程序,我的应用程序的默认位置是 C:\Users\Duncan\my-app,然后,当我更改我的应用程序并将其放置在 D:\All-my-Apps-folder 中时,我遇到了那个错误......

我挠了挠头,尝试了 1、2、3 和更多.....无!直到我将所有代码返回到默认文件夹位置,令我惊讶的是,我再次滚动:)

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