![](/img/trans.png)
[英]rake assets:precompile, rake aborted - error pushing to heroku - ruby on rails
[英]Ruby on Rails: heroku run rake assets:precompile
請幫助我理解heroku run rake assets:precompile
究竟是什么。 自從我開始在rails上使用ruby之后,我總是在推送到github和heroku之前運行這三個命令:
bundle exec rake assets:precompile
RAILS_ENV=production bundle exec rake assets:precompile
在我推到heroku后,我會跑:
heroku run rake assets:precompile
但是,當我在上次推送到heroku后嘗試運行它時,我在不同的文件上遇到了一堆相同的錯誤。 例如:
Warning. Error encountered while saving cache ... can't dump anonymous class ...
為了看看我能解決這個問題,我跑了
heroku run rake assets:clean
然后heroku run rake assets:precompile
再次heroku run rake assets:precompile
。 問題是一切都運轉良好,但我覺得如果有這些警告/錯誤。 請幫我理解。 謝謝!
預編譯
為了給你一些更清晰的定義 - Heroku
並不是唯一需要你“預編譯”你的資產的系統。 資產預編譯是大多數Rails生產環境的先決條件,因為它允許您提供靜態資產(文件) - 完美的速度和效率
以下是Rails文檔中有關它的內容:
在生產環境中,Sprockets使用上面概述的指紋識別方案。 默認情況下,Rails假設資產已經過預編譯,並且將由Web服務器作為靜態資產提供。
在預編譯階段,MD5從編譯文件的內容生成,並在寫入光盤時插入文件名。 Rails助手使用這些指紋名稱代替清單名稱。
Heroku希望您預編譯資產的原因是因為Heroku環境的設計是為了提高速度和效率; 因此,不希望在為應用程序的每個請求/實例編譯組件時花費CPU功率
這意味着您必須自己預編譯資產,或者讓Heroku buildpacks為您排序
Heroku的
正如CWitty
所提到的,您需要確保在本地編譯資產。 雖然我不確定你收到的錯誤,但我確實知道一件事: 預編譯填充public/assets
文件夾
這意味着如果您在提交到Heroku 之前在本地進行預編譯,那么在嘗試在Heroku上運行應用程序之前 ,您將擁有public/assets
目錄中的所有最新資產。
雖然Heroku確實執行預編譯作為構建過程的一部分,但通過在本地預編譯,您將更安全(從異常的角度來看):
$ rake assets:precompile RAILS_ENV=production
這將使您能夠填充public/assets
文件夾,然后允許您毫無問題地推送到Heroku
你應該在推送到Heroku之前運行這個命令,因為它** **編譯你的資產。 如果你缺少一個manifast.yml文件,Heroku將自動運行此命令。 運行rake assets:precompile
在本地rake assets:precompile
,您可以提交所有更改,然后推送到Heroku。
對於任何無法弄清楚為什么Heroku不會自動編譯資產的人:
如果在您的應用中檢測到public / assets / manifest.yml,Heroku將假定您自己正在處理資產編譯,並且不會嘗試編譯您的資產。 Rails 4使用名為public / assets / manifest-.json的文件。 在這兩個版本上,您可以通過運行$ rake assets來生成此文件:在本地預編譯並將結果文件檢入Git。
我找到了一個sprockets-manifest-*.json
和Heroku在我刪除這個文件后開始自動編譯我的資產。
在我的例子中,這個文件是由rails_composer
腳本rails_composer
。
如果您有任何.jpeg,請確保在編譯之前將它們更改為.jpg。 編譯步驟將為您完成,但如果您使用擴展名指定文件,則image_tags將關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.