用户中的ExecJS :: RuntimeError#index(RoR)

只是跑了一个“生成脚手架用户…”的命令。

然后我去localhost:3000/users/看到这个:

  ExecJS::RuntimeError in Users#index Showing C:/Users/TheOnlyUser/Desktop/NMS/nms2/app/views/layouts/application.html.erb where line #6 raised: (in C:/Users/TheOnlyUser/Desktop/NMS/nms2/app/assets/javascripts/ads.js.coffee) Extracted source (around line #6): 3: <head> 4: <title>Nms2</title> 5: <%= stylesheet_link_tag "application", :media => "all" %> 6: <%= javascript_include_tag "application" %> 7: <%= csrf_meta_tags %> 8: </head> 9: <body> Rails.root: C:/Users/TheOnlyUser/Desktop/NMS/nms2 Application Trace | Framework Trace | Full Trace app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___753556572_43068540' app/controllers/users_controller.rb:7:in `index' ... 

这是什么意思?

更新:

这是在Windows 8上。Windows 7不会给这些错误。

我的朋友几个月前在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代码。 它会自动select可用的最佳运行时间来评估JavaScript程序,然后将结果作为Ruby对象返回给您。

ExecJS支持这些运行时:

  • therubyracer – embedded在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的知识来search其他解决scheme。 我无法告诉你在查看选项1或2时closures的网页有多less是我们接受的解决scheme,然后才find有关我们遇到的根本问题的信息。 我们一直在寻找的唯一原因是,我们不能相信Rails团队会(1)在引起问题的每个脚手架生成的项目中插入一行代码,或者(2)要求我们安装额外的软件来运行默认代码行。 所以我们最终得到了解决根本问题的解决scheme(您的里程可能会有所不同)。

修复工作对我们来说:在系统有问题,findExecJS的runtimes.rb文件。 看起来像这样 复制find的文件进行备份。 打开原始的runtimes.rb进行编辑。 find以行JScript = ExternalRuntime.new( 。在该节中,包含:command => "cscript //E:jscript //Nologo //U", – 仅删除//U然后在包含:encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE内容的行上: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并继续search。 让我们知道最终对你有什么作用。除非它删除了require_tree或者安装node.js,这里已经有很多东西了。 🙂

就像评论者所说,你可能错过了一个gem。 尝试将以下内容添加到您的gemfile中:

 gem 'therubyracer' 

并运行bundle install

我最初的解决scheme3上面由凯文P和一切正常工作在我的Windows 8机器上。

昨晚(13/8/13)MS更新后,我甚至无法在我的Rails应用程序中呈现主页。

我安装了node.js,它工作,所以我现在使用解决scheme2。

编辑runtimes.rb解决了Win 8.1上的问题

解决问题的最快方法是安装Node.js。 Ruby会自动检测到它,你将没有更多的JS运行时错误

runtimes.rb文件

  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 ) 

在Windows 8.1中工作

我有同样的问题,解决scheme3由Kevin P工作(编辑runtimes.rb文件)。
我在申请解决scheme时的设置如下:
操作系统: Windows 8.1
Ruby版本: 1.9.3p484
Rails版本: 3.2.14

我解决这个问题的最快方法是这样的:

gem'therubyracer','0.12.1'

包更新

捆绑安装

我希望这会有所帮助。