运行 rake 资产预编译后,在非函数中未定义

Posted

技术标签:

【中文标题】运行 rake 资产预编译后,在非函数中未定义【英文标题】:After running rake assets precompile, getting undefined in not a function 【发布时间】:2013-03-01 20:50:43 【问题描述】:

应用程序包含丰富的javascript,包含一堆backbonejs类、jquery、bootstrap和许多库。

没有预编译,一切都很好。但是,当我在本地或生产服务器上运行 rake assets:precompile 时,就会出现问题。

Uncaught TypeError: undefined is not a function                  application.js:8

application.js 包含所有内容(乍一看),所以我不知道哪里有问题。即使我不知道从哪里开始寻找问题。 在application.js中调试输出javasript是不可能的吧?

有什么想法吗?谢谢大家。

【问题讨论】:

【参考方案1】:

您可能正在无序地连接文件。确保以正确的顺序加载所有依赖项。例如:下划线必须在主干之前加载。

【讨论】:

订单看起来没问题。开发中没有问题,application.js中的顺序指定正确。 你能链接到 application.js 第 8 行的内容吗?只需要前几行。【参考方案2】:

经过几个小时的调试,我发现了问题所在。

PostsRou​​ter 是代码中路由器的名称,当它被预编译时,类的名称被更改为“n”,这很糟糕,因为在构造函数中我下面有这段代码

this.constructor.toString().match(/function\s*(\w+)/)

所以我得到了错误的类名,但这仍然可以。然后我这样做:

new App.Collections["" + this.class_name + "Collection"]

这就是问题所在。 App.Collections.nCollection 不存在,正确的名称是 App.Collections.PostsCollection。

我通过将字符串文字添加到类定义中来修复它,而不是从构造函数名称解析。

祝你有美好的一天!

【讨论】:

以上是关于运行 rake 资产预编译后,在非函数中未定义的主要内容,如果未能解决你的问题,请参考以下文章

heroku 运行 rake 资产:预编译中止,因为文件具有无效的 UTF-8 字节序列

ExecJS :: ProgramError:运行rake资产时意外的标记点«(»,预期的点«:»:在生产中进行预编译

ruby 修复了rake资产:预编译任务

Rake 资产:Heroku 错误上的预编译

Capistrano在部署时失败:资产:使用SSHKit预编译:: Command :: Failed:rake退出状态:1

bundle exec rake assets:预编译失败,出现“意外令牌”