【问题标题】:Rails 3 - Best way to avoid asset isn't precompile error on production? [duplicate]Rails 3 - 避免资产的最佳方法不是生产中的预编译错误? [复制]
【发布时间】:2012-05-06 06:35:42
【问题描述】:

可能重复:
Rails 3.1 asset precompilation

我最近一直在为使用 Rails 3.1 和 Ruby 1.9.2 构建的应用程序而苦恼。

我的问题是有时我将特定的 JS 文件添加到系统中,但是当我将其推送到 Heroku 时,我会看到“yourfile.js is not precompiled”错误。

我通过将我的文件添加到我的application.rb 文件上的config.assets.precompile 来解决这个问题。但是有没有办法使这个过程自动化?我目前有很多js文件,可能会添加更多。有没有可用的宝石?也许我缺少一些配置?

【问题讨论】:

  • 这不是答案,为什么我通常只使用 application.js,并将其包含在每个页面上。这样,javascript 只加载和缓存一次。
  • 是的,但是如果您的网站足够大,您将在不需要的页面上使用 JS 代码。如果这是要走的路,我真的不认为它是最干净的。
  • 但是你只加载一次。浏览器会缓存它。所以唯一的延迟是javascript解析时间。看你有多少。

标签: ruby-on-rails-3.1 asset-pipeline


【解决方案1】:

您应该将这些文件添加到 application.js 并包含在每个页面中。

在某些页面上是否不需要它并不重要;如果服务器设置正确,则 application.js 文件将被浏览器缓存,并且不会在用户浏览站点时再次下载。第二个优点是,您的 js 文件可以通过透明代理缓存在某处,从而降低带宽成本,并加快代理另一端人员的响应时间。

如果您只想根据需要包含文件,则必须将它们包含在预编译数组中 - 这是预编译任务知道使它们在生产清单中可用的唯一方法。

在实践中,您可以在 application.js 中包含许多页面共有的 js,如果一页的 js 有很大一部分,则仅将其放在该一页上。

【讨论】:

  • 那么没有别的办法了吗?我知道如果我在 application.js 文件中包含所有内容,它将被缓存并且只下载一次,但我的直觉告诉我,在所有页面上包含所有界面代码是错误的。我的意思是,我应该只能加载特定接口所需的代码,不是吗?
  • 默认方式是 require 树,将所有代码拉入到 application.js 中。在每页基础上使用 js 并没有错,它只是不是“黄金路径”,这就是为什么您必须将文件添加到预编译数组的原因。从性能的角度来看,这是一种平衡行为。仅当您设置了正确的服务器标头时才会发生缓存,顺便说一句。
猜你喜欢
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多