2011-09-02 65 views
8

我剛剛熟悉Rails 3.1,並且我花了一些時間更新舊項目,並試圖弄清新資產流水線在開發模式和生產模式下的表現。在生產之前如何捕捉鋼軌資產管道中的錯誤?

默認config.assets.precompile設置祝福僅application.css的application.js,意圖使一切應該擔任一個樣式表和一個JavaScript文件。

顯然,有情況時,我們不希望出現這種情況,所以我們可以將項目添加到該配置變量列表...

這是我遇到了我的沙盒項目將生產時的情況:

  1. 在開發中瀏覽網站,看到一切正常。資產被鏈接爲單獨的文件,並且該網站正確顯示。
  2. 上傳該網站到我的服務器,並試圖讓它在生產中工作。第一個錯誤是說「ie.css」(一個條件樣式表)沒有預編譯。 (我在Safari中,這個樣式表甚至不會被下載:在渲染頁面之前,這個錯誤是由stylesheet_link_tag助手引發的。)
  3. Ran rake assets:precompile並重試。
  4. 將犯罪項目添加到config.assets.precompile並再次嘗試。
  5. 將路徑中的錯誤消除,直到遇到另一個資產錯誤。
  6. GOTO 3.

不知道如何解決這個問題,我幾次去兜圈子,直到我以爲我得到了所有的資產和網站在生產中進行渲染。然後我在MSIE中試了一下,並且遇到另一個錯誤500:「belated_png_fix.js」正在有條件加載,直到那時纔出現。

所以我的問題是,除了試驗和錯誤或嚴重依賴集成測試,我怎麼能預測,當資產管道發現某些樣式表或JavaScript沒有添加時,我的網站不會彈出到預編譯列表?

我也很好奇,爲什麼一個缺失的樣式表資產應該導致整個頁面出錯500,而不是僅僅按需編譯它,或者在請求資源時提供404。這是故意設計的「早期失敗」嗎?

+0

我最近將一箇舊應用程序轉換爲資產管道,並沒有任何問題。我花了一段時間才弄清楚一切如何一起工作。要回答你的問題,你能顯示你的css和js文件的內容,特別是require語句嗎?我也很感興趣的是你如何從視圖中調用這些。最後,他們都在應用程序/資產或您是否使用庫/資產和供應商/資產? –

回答

1

我也有類似的問題與鐵軌3.1。你可以做的最好的事情是安裝capistrano多階段,並獲得一個臨時服務器。

如果由於任何原因無法執行此操作,請在計算機上安裝虛擬機並嘗試複製服務器環境。

+0

是的,我已經這樣做了,基本上。它屬於「反覆試驗」的標題(當然可以通過一些集成測試來實現自動化......也許沒有更好的方法。) –

0

這可能是矯枉過正,但這對我很有用(它給我乾淨,編譯的資產)。我在.bash_profile文件中有這個。

alias ggo='bundle exec rake assets:clean && bundle exec rake assets:precompile && git add . && git commit -m "precompile" && git push origin master && cap deploy' 

和這在我的配置/環境/生產。RB(必要時軍隊生產編譯;不應該是一個必要,如果我記得運行「GGO」在前):

config.assets.compile = true 

所以,我的工作流程是:1。 代碼 2.混帳添加& git commit 3.如果我碰到CSS/SASS/JS/CoffeeScript文件,我運行ggo。否則,我做一個正常的帽子部署。

+0

有用的技巧,但問題是預編譯僅對它知道的項目起作用關於。訣竅是弄清楚從各種視圖鏈接的資源,並確保它們被添加到列表中。 –

1

持續部署是一件好事,你應該達到這麼簡單的地步,無論如何它確實沒有那麼痛苦。這就是說,config.assets.precompile可以採取正則表達式,所以你如何提出一個標準的頂級鏈輪「清單」文件,或標準的子文件夾的東西,不會被捆綁起來? (請注意,我還沒有真正嘗試過這個...)

2

我剛剛發佈了一個名爲assets_precompile_enforcer的寶石,它確保開發人員在開發時不會忘記將資產添加到config.assets.precompile。如果您通過javascript_include_tagstylesheet_link_tag包含資產,並且它與config.assets.precompile中的過濾器不匹配,則會引發異常。

這意味着資產錯誤將在開發過程中捕獲,而不是在部署到生產後發現。