2011-10-26 417 views
10

簡而言之,問題在於,在開發模式下,我們會對CSS或JS文件進行更改,但始終會獲取這些文件的緩存/舊版本。我做的沒有任何影響。我檢查了幾十次配置,嘗試了每個配置值的組合,但始終保持相同的結果:過時/緩存的文件。我必須實際運行在生產模式下,並在每次更改測試後重新啓動服務器。Rails 3.1.1資產管道Heroku緩存gotcha

我花了幾天的時間在這個問題上扯掉了我的頭髮,看了幾十個有關資產管道的stackoverflow問題,但從來沒有找到一個解決它的問題,所以我想我會把它發佈在這裏作爲後代。

我們使用Heroku並預編譯我們的資產,因爲Heroku無法爲我們預編譯(我們也使用devise,這顯然是heroku預編譯失敗的原因)。所以爲了將我們的預編譯資源提升到Heroku,我們必須檢查它們是否爲git。

這是問題

當我們升級到Rails 3.1.1資產預編譯生成的文件都帶有和沒有名稱中的MD5散列。我沒有想太多,然後繼續檢查所有這些文件,以便推送到heroku。有一段時間後,我注意到在開發模式下緩存結果的問題。沒有MD5哈希的預編譯和簽入資產是從/ public/assets作爲靜態文件提供的,這使得我們無法看到我們在/ app/assets中做出的任何更改。

在終於意識到這一點之後,我運行了git rm/public/assets並且一切都重新運行。所以外賣是:請小心檢查資產到GIT!

把這個問題變成一個問題:其他人如何做到這一點?我錯過了明顯的東西嗎?我真的很喜歡Heroku爲我預編譯我的資產,但是由於設計原因我收集的db連接錯誤失敗了。我曾希望Rails 3.1.1解決了這個問題,但事實並非如此。

回答

12

你在github上籤出了這個devise issue嗎?具體來說,Jose Valim說

Rails 3.1.1 final有一個方法叫做 config.assets.initialize_on_precompile。如果將其設置爲false,那麼 應該很好,但它不會允許您訪問您的資產的 模型信息(您可能不應該)。

也許這樣可以讓預編譯發生在Heroku上。

+0

Dty,在發佈這個問題之前,我已經嘗試過這個確切的配置,但當時它對我沒有任何作用。不過,我只是試了一次,這次與Devise 1.4.9和羅,看到它的作品!感謝您的建議,讓我再次嘗試。 –

+0

@ JeffCutler-Stamm很高興它解決了!我還在Heroku上託管一個Rails 3.1.1應用程序,但還沒有添加設計(但很快) – Dty

+1

我會注意到你添加到config/application.rb –

0

檢查來自Heroku的this guide。它概述了部署Rails 3.1應用程序的3種方法。其中兩個不需要本地預編譯。

+0

謝謝 - 但這些都不適合我。正如我在問題中提到的,我認爲這是由於設計。編譯期間預編譯總是失敗並出現數據庫連接錯誤。 –

+0

你在說運行時編譯失敗了嗎? –

+0

是的,運行時編譯失敗,所以我卡在w/precompilation之前推向heroku。 –