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