2016-12-25 41 views
4

我想從Heroku預編譯資產改爲在開發時對其進行預編譯,並將它們推送到Heroku。我瞭解的基本程序是使用Heroku更改資產編譯位置的正確步驟

RAILS_ENV=production bundle exec rake assets:precompile 
    git add . 
    git commit -m 'Add precompiled Assets' 
    git push production master 

但是,這抹掉了heroku上的任何現有資產。例如,舊電子郵件中引用的圖像已被清除。有沒有辦法做到這一點,並提供遺留資產的連續性?

回答

0

基於Heroku支持的一些幫助和下面的Schneems的評論,這裏是我回答的非答案。

  • 除非您瞭解使用鏈輪管理資產的複雜性,否則在Heroku上進行預編譯而不是在本地執行。
  • 無論您是預先編譯本地還是heroku,都可以使用CDN並在您的資產上設置遠期過期日期。
  • 使用最新版本的鏈輪(3.7.1作爲寫這篇文章的時間)。
  • 如果您在本地進行預編譯,請注意鏈輪確實會保留資產的最後三個副本,並且請記住,您的資產應與上一版本保持一致。
  • 有很多邊緣情況,所以沒有一個適合堆棧溢出格式的簡單答案。

因此,總之,除非您非常瞭解或勇敢,否則不要在本地進行預編譯。

最後,使用CDN。

+0

不要做破壞者,它會殺死你的所有資產,不會給你任何舊資產。生成資產後運行'assets:clean'就是buildpack的功能。 – Schneems

+0

關於使用clobber的推理是當您經歷一個調試周期時,本地資產可以與Heroku資產取得同步。因此,clobber擺脫了任何可疑的情況,然後檢查最後推送到Heroku的資產。這樣你就可以同步。然後預編譯,然後可能做一個資產:乾淨? – Obromios

+0

你不應該在開發模式下使用'rake assets:precompile'。鏈輪被設置爲即時生成資產。如果您確實生成了這些文件,請不要檢查這些資產。如果您使用「資產:clobber」,那麼您可以在鏈接保留最多3份舊資產副本的情況下終止該功能。檢查您的資產以部署到Heroku的唯一原因是,如果您遇到極其罕見的情況並且需要非常嚴格的資產控制。或者您將其用作臨時調試工具。有很多邊緣情況。 – Schneems