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

时间:2012-11-23 13:23:53

标签: ruby-on-rails windows-8

刚刚运行了“生成脚手架用户...”命令。

然后我去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不会出现这些错误。

8 个答案:

答案 0 :(得分:82)

我的朋友几个月前在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代码。它会自动选择可用于评估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 :(得分:4)

就像评论者说的那样,你可能错过了一颗宝石。尝试将以下内容添加到gemfile中:

gem 'therubyracer'

并运行bundle install

答案 2 :(得分:2)

我最初是通过Kevin P获得上面的解决方案3,一切都在我的Windows 8机器上运行良好。

昨晚(2013年8月19日)MS更新后,我甚至无法在我的rails应用程序中呈现主页。

我安装了node.js并且它工作正常,我现在正在使用解决方案2.

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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中工作

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我解决此问题的最快方法是:

gem&#39; therubyracer&#39;,&#39; 0.12.1&#39;

捆绑更新

捆绑安装

我希望这会有所帮助。