Heroku

时间:2015-12-08 23:51:38

标签: ruby-on-rails heroku asset-pipeline

最近,在我最近部署到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编译期间的工作流程如下所示:

  1. 让Heroku预编译资产
  2. AssetSync将所有已编译的资产同步到S3
  3. 已删除已编译资产的所有本地副本
  4. 链接的文章提出了一些关于它为什么不好以及使用什么的观点。

      

    使用资产同步可能会导致失败。很难调试,   不必要的,增加额外的复杂性。不要使用它。相反,使用   CDN。

         

    [...]

         

    您现在应该使用CDN。而不是   在预编译CDN之后将资产复制到S3   从你的网站上抓取它们。以下是为什么更好的原因。

         

    规范资产

         

    [...]它允许您拥有单一,权威的地方   储存信息。如果您需要更改该信息,则仅限您   需要在一个地方改变它。 [...]如果有人有,会发生什么   资产同步后部署失败?如果有人修改了文件怎么办?   在S3斗?现在必须,而不是修复一份资产   修好两个。

         

    部署决定论

         

    如果您正在使用heroku run bash调试dyno并运行   rake assets:预编译这不只是修改本地副本。它   实际上也修改了S3上的副本。 [...]同步部分   如果网络出现故障,asset_sync也会失败。如果   你只写一个文件的一部分,或只有一半的资产被同步?   这些事情发生了。

    虽然我同意他们的观点,但问题仍然存在:当预编译资产存储在slug中时,部署Heroku应用程序的推荐方法是什么?

1 个答案:

答案 0 :(得分:-1)

问题是哪些资产文件使巨头变得庞大?

默认情况下,Rails资产管道只应用于小型且有限的内部资产(如JS,CSS,某些徽标等)。

将大量外部或大文件存储为Rails资产并不是一个好主意,除了管道之外还有很多原因(比如它也会使你的Git目录变得很大)。