使用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。
不要做破坏者,它会杀死你的所有资产,不会给你任何旧资产。生成资产后运行'assets:clean'就是buildpack的功能。 – Schneems
关于使用clobber的推理是当您经历一个调试周期时,本地资产可以与Heroku资产取得同步。因此,clobber摆脱了任何可疑的情况,然后检查最后推送到Heroku的资产。这样你就可以同步。然后预编译,然后可能做一个资产:干净? – Obromios
你不应该在开发模式下使用'rake assets:precompile'。链轮被设置为即时生成资产。如果您确实生成了这些文件,请不要检查这些资产。如果您使用“资产:clobber”,那么您可以在链接保留最多3份旧资产副本的情况下终止该功能。检查您的资产以部署到Heroku的唯一原因是,如果您遇到极其罕见的情况并且需要非常严格的资产控制。或者您将其用作临时调试工具。有很多边缘情况。 – Schneems