使用Heroku更改资产编译位置的正确步骤

问题描述:

我想从Heroku预编译资产改为在开发时对其进行预编译,并将它们推送到Heroku。我了解的基本程序是使用Heroku更改资产编译位置的正确步骤

RAILS_ENV=production bundle exec rake assets:precompile 
    git add . 
    git commit -m 'Add precompiled Assets' 
    git push production master 

但是,这抹掉了heroku上的任何现有资产。例如,旧电子邮件中引用的图像已被清除。有没有办法做到这一点,并提供遗留资产的连续性?

基于Heroku支持的一些帮助和下面的Schneems的评论,这里是我回答的非答案。

  • 除非您了解使用链轮管理资产的复杂性,否则在Heroku上进行预编译而不是在本地执行。
  • 无论您是预先编译本地还是heroku,都可以使用CDN并在您的资产上设置远期过期日期。
  • 使用最新版本的链轮(3.7.1作为写这篇文章的时间)。
  • 如果您在本地进行预编译,请注意链轮确实会保留资产的最后三个副本,并且请记住,您的资产应与上一版本保持一致。
  • 有很多边缘情况,所以没有一个适合堆栈溢出格式的简单答案。

因此,总之,除非您非常了解或勇敢,否则不要在本地进行预编译。

最后,使用CDN。

+0

不要做破坏者,它会杀死你的所有资产,不会给你任何旧资产。生成资产后运行'assets:clean'就是buildpack的功能。 – Schneems

+0

关于使用clobber的推理是当您经历一个调试周期时,本地资产可以与Heroku资产取得同步。因此,clobber摆脱了任何可疑的情况,然后检查最后推送到Heroku的资产。这样你就可以同步。然后预编译,然后可能做一个资产:干净? – Obromios

+0

你不应该在开发模式下使用'rake assets:precompile'。链轮被设置为即时生成资产。如果您确实生成了这些文件,请不要检查这些资产。如果您使用“资产:clobber”,那么您可以在链接保留最多3份旧资产副本的情况下终止该功能。检查您的资产以部署到Heroku的唯一原因是,如果您遇到极其罕见的情况并且需要非常严格的资产控制。或者您将其用作临时调试工具。有很多边缘情况。 – Schneems