首頁>Program>source

我有个 Ruby on Rails   非常接近子弹大小限製(300mb)的應用程式.我用 .slugignore尽可能减小了尺寸   但没有得到我想要的結果.

一時兴起,我尝試建立一个新的 Heroku   應用程式並為其部署了相同的git儲存庫.瞧,它就在下面(只有 80mb   vs維兹威兹 ).当訪問bash並檢查每台服務器的大小時,我註意到服務器之間存在一些差異:

208mb

有什麼作用? 在Heroku上,是否期望使用者在经過足够的部署後销毁並重新建立應用程式? 我瀏覽了公共目錄,它保留着各種旧的已删除資产和垃圾.我该如何清理現有應用程式而又不破壞它並从頭開始?

du -hs * 130M (old) vs 1.4M (new) public 23M (old) vs 5.3M (new) tmp ...
最新回復
  • 4天前
    1 #

    這可能与Rail尝試避免部署期間出現問题有關.目標是避免部署期間的停機和/或錯誤.您的代碼不会立即部署到所有服務器. Rails解決方案是允许資产的多个版本同時存在.通常的過程是:

    %> rake assets:precompile  # To build new assets
    %> rake assets:clean       # Remove old assets
    

    Rails保留資产的2个先前版本(預設情况下).根据應用程式的不同,您可能需要一段時間才能使用旧資产.例如,如果您有一个沉重的JavaScript應用程式,该應用程式可以一次获取資源,然後通過XHR動態更新.客戶端中執行的旧代碼可能引用其他旧資源.即使使用非客戶端繁重的應用程式,您可能也有几秒钟的時間,其中某些节點引用旧資产,而另一些节點引用新資产。

    這可以解釋某些原因,即您的旧應用中public更大的原因.它實質上具有所有資产的三个版本,而新部署中只有一个.听起来好像一定要弄亂您的構建環境,因為即使您的所有資产都占用了新應用程式中的1.4MB,三倍於该大小的大小也應仅為5MB,而不是旧應用程式中的130MB.

    除了資产的三个版本外,tmp目錄中還存在一些累积內容.資产編譯過程將一些資訊快取在tmp目錄中. Rails的耙子是tmp:cache:clear,您可以定期執行以删除那裏的杂物。

    Heroku自動執行 rake assets:clean .因此,應仅將其保留為資产的三个版本.但是Heroku實際上並没有執行 rake tmp:cache:clear .相反,它们具有一些自定義代碼,這些代碼將删除快取檔案,直到快取的資料小於50MB.我假設他们這樣做是為了在保留上限的同時保留尽可能多的快取資訊.保留尽可能多的快取資料可能会確保資产編譯快速執行.這意味着您的tmp目錄將繼續增长,直到達到50MB。

    如果您的public / assets目錄超出3个版本,或者tmp目錄中的50MB太多了,那麼建立一个新的應用程式是清除問题的一種不錯的方法.您還可以建立一个自定義子弹.刚刚執行 rake assets:clean   或 rake tmp:cache:clear   在heroku控製台上無法正常工作.那只会簡潔測功機上的东西,而不是你的.因此,当建立新的測功機時,您的簡潔工作將被丢棄。

  • python:从Mako模板輸出(塔)中去除空格
  • MongoDB C#:MongoDB C#-為不存在的元素获取BsonDocument