Ruby on rails 3.2 Rails资产预编译从全局范围中删除函数(TypeError:对象不是函数)。怎么把他们弄回来?

Ruby on rails 3.2 Rails资产预编译从全局范围中删除函数(TypeError:对象不是函数)。怎么把他们弄回来?,ruby-on-rails-3.2,asset-pipeline,sprockets,precompile,pre-compilation,Ruby On Rails 3.2,Asset Pipeline,Sprockets,Precompile,Pre Compilation,我有这样一个js代码: function Global(params) { ... } var g = { onDocLoad: function() { // on DOM load I instantiate the Global function-constructor // which is above this line, so it is already in scope var global = new window.Globa

我有这样一个js代码:

function Global(params) {
    ...
}

var g = {
   onDocLoad: function() {

      // on DOM load I instantiate the Global function-constructor
      // which is above this line, so it is already in scope
      var global = new window.Global(params);
}

window.addEventListener("load", g.onDocLoad, false);
如果我将此文件作为静态文件使用,而不进行预编译,则一切正常

如果我预编译它:

rake assets:precompile:all RAILS_ENV=development
然后刷新我得到的页面:

Uncaught TypeError: object is not a function
new window.Global(params)正好在同一行上。它说,
Global
不是一个函数。但这不可能是真的。这是一个函数

我调试了那一行,发现当到达这一行时,全局范围内的
Global
null
。没有具有这样名称的函数

我的问题类似于这些问题:

但他们的解决方案不适用于我的情况


有什么问题吗?为什么预编译会破坏工作代码?

因此,我学会了如何避免它。但我不知道为什么会这样

在开发模式中,资产按照清单文件中指定的顺序作为单独的文件使用。本舱单:

//= require core
//= require projects
//= require tickets
将生成此HTML,三个
需要
-三个单独的标记:

<script src="/assets/core.js?body=1" type="text/javascript"></script>
<script src="/assets/projects.js?body=1" type="text/javascript"></script>
<script src="/assets/tickets.js?body=1" type="text/javascript"></script>
当“调试模式”处于禁用状态时,链轮将连接并在所有文件上运行必要的预处理器。关闭调试模式后,将生成上述清单:

<script src="/assets/application.js" type="text/javascript"></script>
错误消失了

我认为原因在于文件的顺序。使用
debug=true
预编译会丢失正确的文件序列,尽管在我的清单中指明了正确的序列(这只是一个简单的js文件,
somefile.js
,您添加到页面中;他们只称之为清单)

<script src="/assets/application.js" type="text/javascript"></script>
config.assets.debug = false
// and then
rake assets:precompile:all RAILS_ENV=development