Windows 上的 ExecJS::RuntimeError 试图遵循 rubytutorial
Posted
技术标签:
【中文标题】Windows 上的 ExecJS::RuntimeError 试图遵循 rubytutorial【英文标题】:ExecJS::RuntimeError on Windows trying to follow rubytutorial 【发布时间】:2012-09-13 06:45:33 【问题描述】:更新: 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''
这里是 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 并尝试了各种 gem,但请提出一些可以帮助我在 Windows 上开发的更改。我使用 rubyinstaller 完成所有工作。
我错过了什么?
【问题讨论】:
您能否尝试从application.js
中删除行//= require_tree .
并查看错误是否仍然存在?
哇....成功了...非常感谢科林,删除了 //= require_tree 行。已解决问题。我无法解释这是多么令人宽慰,但你能解释一下为什么那条线会导致错误吗?
该行将app/assets/javascripts
中的每个.js.coffee
文件编译成JavaScript,然后将其添加到您的布局中(但仅在开发模式下;在生产模式下,编译后的js将添加到您的@987654333 @ 文件)。拥有require_tree .
不应该导致错误,因此不知何故,您遇到了包含其中一个文件的问题。您可以发布app/assets/javascripts
目录中所有文件的列表吗?另外,您可以尝试将sessions.js.coffee
的内容完全删除,然后重新添加//= require_tree .
,看看错误是否仍然存在。
@ColinR,您应该将此添加为问题的答案。我有同样的问题,如果我没有浏览 cmets,我会继续寻找另一个问题。
【参考方案1】:
快速而肮脏的解决方案:从application.js
中删除//= require_tree .
。
正如我在问题的 cmets 中解释的那样,这实际上并不能解决导致错误的根本问题,而只是回避它。
【讨论】:
你好 Colin R,我需要帮助。如果错误发生在第 5 行,仅删除 true %> 这行代码解决了问题怎么办。但引导程序不适用于网页。甚至删除 *= require_tree 。从 application.css.sass 不工作。我朋友的系统是Windows 7 32bit,没有安装nodejs。即使您建议的方法3也不起作用。我认为在我的情况下 js 没有问题。知道如何防止错误吗? 我也安装了 Node.js 并且 npm 的路径是在环境变量中设置的。还是一样的错误。我正在 Windows 8.1 64 位操作系统中开发应用程序,并且使用了相同的 gem。【参考方案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/安装 - 重新启动机器,一切正常。
【讨论】:
我按照建议安装了node,不需要重新启动,只需要打开一个新的cmd窗口(猜想这是为了可以访问新路径)【参考方案3】:几个月前,我的朋友在尝试一个关于 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,否则已经有很多这样的事情发生了。 :)
【讨论】:
我希望我能给你 +50 票。这让我厌烦了太久,试图让 therubyracer 在 Windows 上运行,意识到它不受支持,然后试图让 ExecJS 正确加载。感谢您花时间帮助我学习而不是混淆问题!对于那些想知道的人,您可以通过键入“gem which execjs”来获取 runtimes.rb 文件的位置 进行此更改后,我必须运行 bundle install 才能使其正常工作。因此,如果有人尝试此解决方案,但一开始似乎不起作用,请确保您尝试一下!我在 Windows 8 64 位上,它对我有用!谢谢 +1 省去了安装节点的麻烦。选项 3 在 Windows 8 64 位上适用于我 对选项 3 的评论:github.com/sstephenson/execjs/issues/111 表示我们只需将UTF-16LE
更改为 UTF-16
即可解决问题,而无需删除 //U
选项。我确认了。
我看到了很多方法,但没有看到很多原因。为什么更改看起来像字符集的内容仅在 Windows 上会有所不同?我很好奇。【参考方案4】:
我必须将我的 nodejs 文件夹添加到我的 Windows Path 环境变量中。在 Windows 8 中打开控制面板,进入系统,高级系统设置(左侧),单击左侧的环境变量,然后编辑路径变量以将目录包含到您的 nodejs 文件夹中(可能在程序文件中)。
当然,您必须安装 Node.js(使用 Windows installer)并通过 NPM 安装 CoffeeScript。
【讨论】:
【参考方案5】:这是一个不太复杂的解决方案,适合初学者:
如果您只是在学习本教程,您可能正在使用默认的 Gemfile(或非常接近)。您可以在文本编辑器中打开它,然后从该行前面删除井号:
# gem 'therubyracer', :platforms => :ruby
您需要重新运行bundle install
,这可能会下载一些东西。但是一旦完成,您应该能够毫无问题地启动服务器。
至少,这对我有用。
顺便说一句,这也适用于 Ubuntu 12.04。
【讨论】:
【参考方案6】:有同样的问题 操作系统 - Windows 8 错误-'ExecJS::RuntimeError...' 解决方案 - 缺少 Node.js
-
从http://www.nodejs.org/download/ 安装 Node.js
重启电脑
【讨论】:
这个对我有用。这里有人知道为什么安装 node.js 有效吗?【参考方案7】:我偏爱学习路线。看来问题出在
IO.popen(command, options) |f| output = f.read
在 execjs\external_runtine.rb
中返回一个空字符串(版本 1.4.0 中的第 173 行)。这就是错误消息不包含文本的原因。建议的更改对我不起作用。我将UTF-16LE
更改为UTF-8
,但它仍然返回一个空字符串。我从command
中删除了\\U
- 这至少返回了文本,但它的编码错误 - 在浏览器中它显示为中文字符。
根据this MSDN blog post,使用//U
标志并重定向到文件会导致cscript
使用UTF-16
返回结果。
然后,神奇地,它使用command
作为"cscript //E:jscript //Nologo"
和encoding
作为@987654334 工作(@#%$&^@$%!!!?!?!) @。哦,好吧。
【讨论】:
【参考方案8】:我知道这个问题的答案很晚,但我遇到了类似的问题,并深入了解了真正导致问题的原因。
原来默认的windows jscript引擎还在es3上,很多gem都在利用es5或es6的特性。 不幸的是,如果发生这种情况(您使用的是利用 es5 或 es6 功能的 gem 或一段代码),则无法让它在具有本机 js 引擎的 Windows 上工作。
这就是安装node.js解决问题的原因(node至少是es5)。
希望这可以帮助一些遇到 jsexec 运行时错误的人。
我的 2 美分建议是安装节点(非常简单)或安装 v8,而不是删除 //=require_tree。
注意,如果检测到,execjs 将自动使用节点。否则强制使用它,在引导中添加类似:
ENV['EXECJS_RUNTIME'] = 'Node'
将环境设置为节点。
【讨论】:
安装节点是个好主意(可能也是最简单的),但考虑到它的大小仍然有点矫枉过正【参考方案9】:对于像我这样的初学者:
-
导航到 \app\views\layouts\application.html.erb
将第 6 行更改为:
' true %>'
到
<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>
Source from tutorial to fix here
【讨论】:
当我输入两行代码时,矿井就可以工作:<%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %>
thank's Leandro P.
请不要这样做。它只会删除 Rails 应用程序中的所有 Javascript。这隐藏了问题,但会在以后引起其他问题。
是的,正如@mattangriffel 所说,不要这样做。【参考方案10】:
对于 Windows 用户,这可能有效。在 windows 上运行 coffee-script-source >1.9.0 有问题。
看来您必须将其添加到您的 gemfile 中:
gem 'coffee-script-source', '1.8.0'
然后做
捆绑更新咖啡脚本源
我尝试了上述所有选项,还混合了它们的一些组合,直到我找到了这个 Rails-4, ExecJS::ProgramError in Pages#welcome 并完成了多个系统 gem 更新以及捆绑安装和更新。
我恢复了我的所有试验并降级了我的咖啡脚本源并且它有效。在此处发帖以帮助其他可能遇到类似问题的人。
更新供应商/缓存中的文件
coffee-script-source-1.8.0.gem 从供应商/缓存中删除过时的 .gem 文件 coffee-script-source-1.9.1.1.gem Bundle 更新了!
【讨论】:
我尝试了接受答案的选项 3,然后得到“参数错误”,尝试安装 nodejs,没有帮助,将 nodejs 添加到路径变量(我在 Win10 上),最后尝试了你的方法.工作!谢谢【参考方案11】:运行 Win 8 64 位 导轨 4.2.5 红宝石 2.1.7
This one worked for me
【讨论】:
【参考方案12】:我使用了解决方案2,因为之前我有这个错误,但在这个位置不起作用,然后我添加了
gem 'coffee-script-source', '1.8.0'
然后运行
bundle install
我的问题解决了
【讨论】:
如果您使用了解决方案2,您必须在安装Node.js后重新加载windnows中的所有命令行。然后打开服务器再试一次。【参考方案13】:您是否从 C:\Users\this-user\yo-app 更改了代码的位置?
我年轻时在 Rails 中创建了一个应用程序,我的应用程序的默认位置是 C:\Users\Duncan\my-app,然后,当我更改 my-app 并放置它在 D:\All-my-Apps-folder 我有那个错误....
我挠了挠头,尝试了 1,2,3 和更多......没有!直到我将所有代码都返回到默认文件夹位置并令我惊讶的是,我再次滚动:)
万一有人觉得这很有用(我无法解释为什么会这样,也许有人可能没有猜测)
【讨论】:
以上是关于Windows 上的 ExecJS::RuntimeError 试图遵循 rubytutorial的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)
Windows 上的 WaitOnAddress() 在 Linux 上的完全等价物是啥?