Windows 上的 ExecJS::RuntimeError 试图遵循 ruby​​tutorial

IT技术 javascript ruby-on-rails ruby windows asset-pipeline
2021-01-27 02:27:19

更新: 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 和其他我什至不记得的东西。这是宝石文件

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/

应用程序.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

应用程序.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 上开发的更改建议。我使用 ruby​​installer 做所有事情。

我错过了什么?

6个回答

几个月前,我的朋友在 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
  • 节点.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,否则已经有很多了。:)

+1 省去了安装节点的麻烦。选项 3 在 Windows 8 64 位上对我有用
2021-03-15 02:27:19
我看到了很多方法,但不是很多为什么。为什么仅在 Windows 上更改看起来像字符集的内容就会有所不同?我只是好奇而已。
2021-03-23 02:27:19
进行此更改后,我必须运行 bundle install 才能使其正常工作。因此,如果有人尝试使用此解决方案,但一开始似乎不起作用,请务必尝试!我在 Windows 8 64 位上,它对我有用!谢谢
2021-03-29 02:27:19
我希望我能给你+50票。长期以来,我一直在为 Windows 安装 ruby​​racer 感到恼火,意识到它不受支持,然后试图让 ExecJS 正确加载。感谢您抽出时间帮助我学习而不是混淆问题!对于那些想知道的人,您可以通过键入“gem which execjs”来获取 runtimes.rb 文件的位置
2021-04-03 02:27:19
对选项3的评论:github.com/sstephenson/execjs/issues/111说我们只需更改UTF-16LEUTF-16无需删除//U选项即可解决问题我确认了。
2021-04-06 02:27:19

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

  1. http://www.nodejs.org/download/安装 Node.js
  2. 重新启动计算机
这个对我有用。这里有人知道为什么安装 node.js 有效吗?
2021-04-05 02:27:19

我遇到了这个问题并且正在浏览互联网我正在使用这个 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 窗口(猜测这是为了可以访问新路径)
2021-03-29 02:27:19

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

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.

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

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

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