Heroku rails 3.1 app – 在本地编译资产与在slug编译期间编译资产

我正在Heroku Cedar堆栈上运行rails 3.1 app,它支持资产管道。 Heroku 列出了3种编译资产的方法

  1. 在本地编译资产。
  2. 在slug编译期间编译资产。
  3. 在运行时编译资产。

显然#3对性能有害,而Heroku文档也建议不要这样做。 但我不确定#1和#2之间哪个更好。

#1要求您运行rake assets:precompile并在git中包含您的public/assets文件夹。 你的slug会更大,但我认为部署网站的停机时间会更短。 但更大的段塞大小意味着应用程序启动速度较慢,所以可能是一个洗牌。

由于在Heroku端进行了预编译,#2将使部署更新需要更长的时间。 但是,你会有一个较小的slu and,而且管理/记忆的次数较少。

我的问题是 – 哪个选项(#1或#2)最适合制作,为什么?

到目前为止它看起来像选项#2但我想确保我不会忽视某些东西。

我在这里解决了一些问题和一个大问题: Rails 3.1.1资产管道Heroku缓存问题

我更喜欢#2,如果它适用于我,所以我不必检查编译资产,这只会使git存储库膨胀。

在slug编译期间编译资产不会导致任何额外的停机时间,因为现有的应用程序将保持不变,直到slug编译完成,所以不用担心。

如果你能让它适合你,我的建议是#2。 如果你最终以w /#1结束,那么最好的做法是在rake资产之前使用git rm -r public / assets:预编译以确保没有残留物。

它可能取决于资产文件夹的大小(并且可能长期解决方案是将这些资产放在应用程序之外并将它们托管在S3等上。)

否则,我认为#1将是最好的生产,因为任何资产都可以直接使用和缓存。

我正在阅读Heroku关于资产的文档部分,它们似乎表明#2将被用于以防您忘记自己做,为方便起见。 你不会得到一个小的slug,因为资产准备的结果将被包含在slug中以进行部署。