31

只需运行“生成脚手架用户...”命令。

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

4

8 回答 8

83

几个月前,我的朋友在尝试关于 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
  • 节点.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,否则已经有很多这样的事情发生了。:)

于 2013-01-02T08:55:37.137 回答
4

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

gem 'therubyracer'

并运行bundle install

于 2012-11-23T15:31:58.743 回答
2

我最初选择了 Kevin P 上面的解决方案 3,并且在我的 Windows 8 机器上一切正常。

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

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

于 2013-08-20T00:04:14.250 回答
2

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

于 2013-12-20T14:03:24.807 回答
1

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

于 2013-07-03T16:03:32.110 回答
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 中工作

于 2013-11-01T05:11:03.077 回答
0

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

于 2013-12-31T21:18:02.133 回答
0

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

宝石'therubyracer','0.12.1'

捆绑更新

捆绑安装

我希望这将有所帮助。

于 2014-07-06T00:50:56.457 回答