升级到Rails的问题3.2.11:Static_pages #home中的ExecJS :: RuntimeError

时间:2013-01-11 17:26:42

标签: ruby-on-rails ruby-on-rails-3

我刚刚从Rails 3.2.10升级到3.2.11,并且没有对我的应用程序进行任何其他更改。

突然间,我的网站无法加载 - 并向我提供错误消息:

ExecJS::RuntimeError in Static_pages#home

是否有人知道为什么Rails 3.2.11中的更改​​会导致此问题?

ExecJS::RuntimeError in Static_pages#home

Showing C:/Sites/av_reports/app/views/layouts/application.html.erb where line #11 raised:


  (in C:/Sites/av_reports/app/assets/javascripts/password_resets.js.coffee)
Extracted source (around line #11):

8:  <meta name="author" content="">
9:  
10:     <%= stylesheet_link_tag    "application", :media => "all" %>
11:     <%= javascript_include_tag "application" %>
12:     <%= csrf_meta_tags %>
13:     <%= render 'layouts/shim' %>
14:   </head>

我的/app/assets/javascripts/password_resets.js.coffee文件包含3行注释掉的文本,所以我猜这不是问题所在。

宝石依赖性或类似的东西是否有变化 - 这可能导致问题?

修改

我的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 bootstrap
//= require_tree .

2 个答案:

答案 0 :(得分:4)

所以......显然这根本不是Rails 3.2.11升级问题。潜在的问题是ExecJS在Windows中的工作方式。我目前正在Windows 8上运行我的开发环境。

在升级到Rails 3.2.11之前,上述错误消息将显示在服务器日志中,但它并未停止服务器。在Rails 3.2.11中,页面将不再加载。

解决方案是编辑Ruby1.9.3 \ lib \ ruby​​ \ gems \ 1.9.1 \ gems \ execjs-1.4.0 \ lib \ execjs \ runtimes.rb文件:

(原始非工作代码):

JScript = ExternalRuntime.new(
    :name        => "JScript",
    :command     => "cscript //E:jscript //Nologo //U",
    :runner_path => ExecJS.root + "/support/jscript_runner.js",
    :encoding    => 'UTF-16LE' # CScript with //U returns UTF-16LE
)

(更新的工作代码):

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
)

感谢评论主题:https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

以及https://stackoverflow.com/a/14119187/1757424的讨论,以获取有关此问题的帮助。

答案 1 :(得分:0)

我有一些问题,但我使用的是Ruby2.0.0

解决方案是编辑Ruby2.0.0 \ lib \ ruby​​ \ gems \ 2.0.0 \ gems \ execjs-2.2.1 \ lib \ execjs \ runtimes.rb