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

时间:2012-09-20 20:29:44

标签: javascript ruby-on-rails ruby windows asset-pipeline

更新: 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

我已尝试过各种建议,包括使用msc安装nodejs,使用execjs 1.3.0和其他我甚至不记得的东西。这是宝石文件

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做了一切。

我错过了什么?

13 个答案:

答案 0 :(得分:240)

我的朋友几个月前在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 文件。它看起来像this。制作找到的备份文件的副本。打开原始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,已经有很多东西可以解决。 :)

答案 1 :(得分:14)

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

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

答案 2 :(得分: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/ - 重新启动机器,一切正常。

答案 3 :(得分:5)

我赞成学习路线。似乎问题源于

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

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

根据this MSDN blog post,使用//U标记并重定向到文件会导致cscript使用UTF-16返回结果。

然后,奇迹般地,它使用command作为"cscript //E:jscript //Nologo"和{{em> @#%$&amp; ^ @ $%!!!?!?!) {1}} encoding。哦,好吧。

答案 4 :(得分:4)

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

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

答案 5 :(得分:4)

我知道对于这个问题来说这是一个非常晚的答案,但我得到了类似的东西,并走了完整的路径,以了解究竟是什么导致了这个问题。

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

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

希望这可以帮助一些人解决jsexec的运行时错误。

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

注意execjs会在检测到时自动使用节点。否则强制使用它,在启动时添加如下内容:

ENV['EXECJS_RUNTIME'] = 'Node'

将env设置为节点。

答案 6 :(得分:4)

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

似乎你必须将它添加到你的gemfile中:

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

然后做

捆绑更新coffee-script-source

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

我恢复了所有的试验并降低了我的咖啡脚本来源,它确实有效。在这里发帖帮助其他可能有类似问题的人。

更新vendor / cache中的文件

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

答案 7 :(得分:3)

对于像我这样的初学者:

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

    '&lt;%= javascript_include_tag'application','data-turbolinks-track'=&gt; true%&gt;'

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

    Source from tutorial to fix here

答案 8 :(得分:2)

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

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

答案 9 :(得分:2)

我使用的是2号解决方案,因为之前我遇到过这个错误,但是在这个时候我没有工作,然后我添加了

router.navigateByInstruction(router.generate(['/404']), true);

并运行

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

我的问题已修复

答案 10 :(得分:1)

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

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

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

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

至少,这对我有用。

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

答案 11 :(得分:0)

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

This one worked for me

答案 12 :(得分:0)

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

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

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

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