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


103

更新: 科林的建议删除行// = 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''

这是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,并尝试了各种工具,但是请提出建议,以帮助我在Windows上进行开发。我使用rubyinstaller进行所有操作。

我想念什么?


5
您可以尝试//= require_tree .从中删除该行application.js,看看错误是否仍然存在?
Colin R

哇......成功了...非常感谢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 .然后查看错误是否仍然存在。
Colin R

1
@ColinR,您应该将此添加为问题的答案。我遇到了同样的问题,如果我没有浏览评论,我会继续寻找另一个问题。
伊曼纽尔·F

Answers:


242

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

选项:

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并继续搜索。让我们知道最终对您有用的..除非删除了require_tree或安装了node.js,否则已经有很多事情发生了。:)


20
我希望我能给你+50票。试图在Windows上安装therubyracer,这使我很生气,意识到它不受支持,然后试图使ExecJS正确加载。感谢您抽出宝贵的时间来帮助我学习而不是混淆问题!对于那些想知道的人,您可以通过键入“ gem which execjs”来获得runtimes.rb文件的位置
Michael

4
进行此更改后,我必须运行软件包安装程序才能正常工作。因此,如果有人尝试该解决方案,但一开始似乎无法正常工作,请确保尝试一下!我使用的是Windows 8 64位,它对我有用!谢谢
彼得·柯比

2
+1避免了安装节点的麻烦。选项3在Windows 8 64 bit上对我有效
Sami

10
关于选项3的评论:github.com/sstephenson/execjs/issues/111说,我们可以通过更改UTF-16LE为来解决问题UTF-16而无需取消该//U选项。我确认了
Tsutomu 2013年

3
我看到了很多方法,但是却没有很多原因。为什么仅在Windows上更改看起来像字符集的字符会有所不同?我很好奇。
NathanTempelman 2014年

14

遇到相同的问题OS- Windows 8错误-'ExecJS :: RuntimeError ...'解决方案-缺少Node.js

  1. http://www.nodejs.org/download/安装Node.js
  2. 重新启动电脑

1
这个为我工作。这里有人知道为什么安装node.js可行吗?
mpalencia

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-16LEUTF-8,但它仍然返回一个空字符串。我\\Ucommand浏览器中删除了这至少返回的文本,但它的编码错误,在浏览器中将其显示为中文字符。

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

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


4

我必须将nodejs文件夹添加到Windows Path环境变量中。在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可以解决问题的原因(node至少为es5)。

希望这可以帮助一些在运行时遇到jsexec错误的人。

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

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

ENV['EXECJS_RUNTIME'] = 'Node'

将env设置为node。


安装节点是一个好主意(也许是最简单的方法),但考虑到
节点的

4

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

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

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

然后做

捆绑更新coffee-script-source

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

我恢复了所有试用版,并降低了我的咖啡脚本来源,并且可以正常工作。在此处发布以帮助可能有类似问题的其他任何人。

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

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'应用程序','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 16-10-16

是的,正如@mattangriffel所说,不要这样做。
尼尔·阿特金森

2

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

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


您好Colin R,我需要帮助。如果错误发生在第5行,该行仅删除<%= stylesheet_link_tag'application',media:'all','data-turbolinks-track'=> true%>该行代码解决了该问题。但是引导程序不适用于该网页。甚至删除* = require_tree。从application.css.sass无法正常工作。我朋友的系统有Windows 7 32bit,未安装nodejs。即使您建议的方法3也不起作用。我认为我的js没有问题。任何想法如何防止错误?
学习者2015年

我还安装了Node.js,并且在环境变量中设置了npm的路径。还是一样的错误。我正在Windows 8.1 64位操作系统中开发该应用程序,并且使用了相同的gem。
学习者

2

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

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

并运行

bundle install

我的问题已经解决


如果使用解决方案编号2,则必须在安装Node.js之后在windnows中重新加载所有comman行。然后打开服务器,然后重试。
Yuliem Alavez'5

1

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

如果您只是在学习本教程,则可能正在使用默认的Gemfile(或将近使用)。您可以在文本编辑器中将其打开,然后从此行的开头删除井号:

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

您将需要重新运行 bundle install,这可能会下载一些内容。但是一旦完成,您应该可以启动服务器,而不会出现任何问题。

至少,这对我有用。

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



0

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

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

我挠了挠头,尝试了1,2,3等等……什么都没有!直到我将所有代码返回到默认文件夹位置并使我感到惊讶,我才再次滚动:)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.