【问题标题】:Rake precompile breaks Javascript with undefined errorRake 预编译会以未定义的错误破坏 Javascript
【发布时间】:2013-12-21 05:41:53
【问题描述】:

我在 Rails 中使用 ng-grid,并在主页上复制了第一个示例,其中:

<div class="gridStyle" ng-grid="availOptions"></div>
$scope.arr = [{name: "Moroni", age: 50},
                 {name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},
                 {name: "Nephi", age: 29},
                 {name: "Enos", age: 34}]

$scope.availOptions = {
data: 'arr'
}

在资产被预编译之前,这很有效。但是运行后

$ rake assets:precompile

我们突然得到两张表——见http://grab.by/t2dm——以及错误:

无法调用未定义的方法“selectionHandlers”

我已经广泛搜索了这个问题,但在网上找不到任何其他帮助。所以我想我会在这里发帖,因为过去几天我一直在尝试调试它。救命!

我们将不胜感激。

【问题讨论】:

  • 你熟悉缩小 Javascript 和 AngularJS 的问题吗?如果您的代码在预编译资产后出现问题,那很可能是您的问题。尝试在“angularjs 缩小”上进行谷歌搜索或阅读this page 上的缩小部分。

标签: ruby-on-rails ruby-on-rails-3 angularjs asset-pipeline ng-grid


【解决方案1】:

您正在开发吗?如果是这样,您几乎肯定需要关闭资产调试。否则,您的所有脚本和样式表都将被复制,因为您将获得连接/缩小版本和未编译版本。

问题在于javascript_include_tag "application.js"

基本上,在开发中,它会扩展成一堆这样的行:

<script src="application.js?body=1"></script>
<script src="my-file1.js?body=1"></script>
<script src="my-file2.js?body=1"></script>
... etc ...

在生产环境中,关闭资产调试,您会看到单个连接文件及其资产管道指纹:

<script src="application.js-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.js"></script>

问题在于,在开发中,一旦您编译了资产,第一个 application.js?body=1 将包含您的所有脚本。但是随后的几行再次包含了这些脚本。

查看您网站的来源;如果您有一个 &lt;script src="application-xxxxxxxx.js"&gt;&lt;/script&gt;,则资产调试已关闭,此答案将无用。如果每个源文件有一个 &lt;script&gt;,则资产调试已打开,并且每个脚本运行两个副本。

当您预编译资产但继续在您的开发环境中运行您的应用程序时,这种情况经常发生,默认情况下资产调试处于开启状态。开发环境和预编译资产兼容;预编译资产后,您需要终止服务器并使用 RAILS_ENV=production 重新启动它,假设您的开发副本已使用合理的伪生产配置进行设置。

【讨论】:

  • 谢谢x1000!你完全正确。我正在测试 rake assets:precompile before deployment 并认为这是 ng-grid 的问题。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
相关资源
最近更新 更多