最近,在我最近部署到Heroku时,我收到了警告advising not to use AssetSync。
remote: ###### WARNING:
remote: You are using the `asset_sync` gem.
remote: See https://devcenter.heroku.com/articles/please-do-not-use-asset-sync for more information.
我们试图通过使用AssetSync解决的原始问题是我们的应用程序中的大型资产导致了巨大的slug大小。在Heroku允许我们的300MB中,我们可能使用接近230MB - 尽管我们的git repo只有大约80MB。
我们通过使用AssetSync将所有已编译的资产同步到通过Cloudfront提供的S3存储桶来解决这个问题。在AssetSync运行之后,我们有一个钩子可以删除所有预编译资产以减少段塞大小。基本上,slug编译期间的工作流程如下所示:
链接的文章提出了一些关于它为什么不好以及使用什么的观点。
使用资产同步可能会导致失败。很难调试, 不必要的,增加额外的复杂性。不要使用它。相反,使用 CDN。
[...]
您现在应该使用CDN。而不是 在预编译CDN之后将资产复制到S3 从你的网站上抓取它们。以下是为什么更好的原因。
规范资产
[...]它允许您拥有单一,权威的地方 储存信息。如果您需要更改该信息,则仅限您 需要在一个地方改变它。 [...]如果有人有,会发生什么 资产同步后部署失败?如果有人修改了文件怎么办? 在S3斗?现在必须,而不是修复一份资产 修好两个。
部署决定论
如果您正在使用heroku run bash调试dyno并运行 rake assets:预编译这不只是修改本地副本。它 实际上也修改了S3上的副本。 [...]同步部分 如果网络出现故障,asset_sync也会失败。如果 你只写一个文件的一部分,或只有一半的资产被同步? 这些事情发生了。
虽然我同意他们的观点,但问题仍然存在:当预编译资产存储在slug中时,部署Heroku应用程序的推荐方法是什么?
答案 0 :(得分:-1)
问题是哪些资产文件使巨头变得庞大?
默认情况下,Rails资产管道只应用于小型且有限的内部资产(如JS,CSS,某些徽标等)。
将大量外部或大文件存储为Rails资产并不是一个好主意,除了管道之外还有很多原因(比如它也会使你的Git目录变得很大)。