最近,在我最近部署到Heroku时,我收到警告,建议不要使用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解决的原始问题是我们的应用程序中的大型资产导致了巨大的段塞大小.在Heroku允许我们的300MB中,我们可能使用接近230MB - 尽管我们的git repo只有80MB左右.
我们通过使用AssetSync将所有已编译资产同步到通过Cloudfront提供的S3存储桶来解决此问题.在AssetSync运行之后,我们有一个钩子可以删除所有预编译资产以减少段塞大小.基本上,slug编译期间的工作流程如下所示:
让Heroku预编译资产
AssetSync将所有已编译的资产同步到S3
将删除已编译资产的所有本地副本
链接的文章争论了一些关于它为什么不好以及使用什么的点.
使用资产同步可能会导致失败.调试很困难,不必要,并增加了额外的复杂性.不要使用它.相反,使用CDN.
[...]
您现在应该使用CDN.CDN在预编译后不会将资产复制到S3,而是从您的网站上抓取它们.以下是为什么更好的原因.
规范资产
[...]它允许您拥有存储信息的单一权威位置.如果您需要更改该信息,则只需在一个位置进行更改即可.[...]如果某人在资产同步后部署失败,会发生什么?如果有人修改了S3存储桶中的文件怎么办?现在你必须修复两个,而不是修复一个资产副本.
部署决定论
如果您使用heroku运行bash在dyno内部进行调试并运行rake资产:预编译这不仅仅是修改本地副本.它实际上也修改了S3上的副本.[...]如果网络出现故障,asset_sync的同步部分也会失败.如果您只编写文件的一部分,或者只有一半的资产被同步,该怎么办?这些事情发生了.
虽然我同意他们的观点,但问题仍然存在:当预编译资产存储在slug中时,部署Heroku应用程序的推荐方法是什么?