运行 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】:经过几个小时的调试,我发现了问题所在。
PostsRouter 是代码中路由器的名称,当它被预编译时,类的名称被更改为“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资产时意外的标记点«(»,预期的点«:»:在生产中进行预编译
Capistrano在部署时失败:资产:使用SSHKit预编译:: Command :: Failed:rake退出状态:1