2011-11-16 84 views
36

我有點困惑,因爲它看起來像application.css包括自己兩次,一旦它列出資源從清單,然後緩存。所以當我刪除一個單獨的文件時,它似乎仍然保持在application.css文件中。rails 3.1資產管道css緩存在開發中

application.css(源)

/* 
*= require twitter/bootstrap 
*= require_self 
*= require_tree ./common 
*= require_tree ./helpers 
*/ 

預期和開發模式輸出所有相關的單個文件

development.rb

# Do not compress assets 
    config.assets.compress = false 

    # Expands the lines which load the assets 
    config.assets.debug = true 

輸出

<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<Blah blah> 
其中一期工程

application.css(輸出)

這應該是空白的?因爲我在application.css文件中的所有內容都是清單,並且沒有實際的css,但是我得到了所有連接的代碼長度爲106kb。

IE瀏覽器如果我刪除公共目錄中的文件,它不會消失。它不再輸出中列出但仍CSS從application.css

+2

我有完全相同的問題與CSS和JS ..無法弄清楚。下面的「答案」沒有解決這個問題。我現在只在開發模式下工作。如何關閉聯合和縮小?這導致我的jquery插件運行兩次,CSS翻了一番。 – dsaronin

+2

在config/environments/development.rb中,如果我設置了config.assets.debug = false,那麼將不會發生雙重加載,因爲沒有生成額外的javascript/stylesheet標記。但是,我不知道是否動態地對整合文件進行了更改。 – dsaronin

+2

你曾經找過這個@holden的解決方案嗎?我有同樣的問題,正在拼命想辦法弄清楚。 – Josh

回答

42

我有過這樣的問題。這是我在預編譯公用文件夾中applcation.css之後的資產以及apps目錄後產生的。我不知道如何解決這個問題,以便它在開發模式下不會發生,但如果你刪除你的目錄,它應該修復它。

檢查,看看你有公/資產文件夾,如果你這樣做,它的全,這可能是爲什麼你看到的兩倍。

+2

我應該如何隱藏公共文件夾中的資源,然後再推動生產的變化,然後再回到開發階段?我可以以某種方式將它從我的開發路徑中刪除嗎? – holden

+4

我刪除了我的'application.js'和'application.css',但留下了指紋版本。看起來它在爲我工作。 – ZMorek

+0

刪除我的application.css和apllication.css.gz修復了這個問題。謝謝。 –

-5

資產做他們的工作出現更好的運行在生產環境中的應用程序時,那麼你就必須裝載只有application.css的所有文件包括和壓縮,在那裏減少服務器請求,這個壓縮樣式的application.css將被緩存。

http://guides.rubyonrails.org/asset_pipeline.html

10

你可能想看看

https://stackoverflow.com/a/7854902/686460

「添加config.serve_static_assets = false來development.rb將阻止加載文件從/公/資產。」 這爲我做

+0

這對我不起作用,不幸的是,它仍然直接從/ public/assets提供application.js的壓縮版本 –

+0

糟糕@Agustin,這個解決方案確實奏效。但是,不屬於資產管道的所有資產不再提供服務(例如favicon.ico和字體)。看起來我必須爲這些資產提供解決方案。 –

+0

這個答案提出了另一種方法:爲開發環境分配一個虛擬資產文件夾。 http://stackoverflow.com/a/11587288/550712 –

7

@奧古斯丁的解決方案確實對我來說,但這裏有幾件事情你需要做的:

  1. 在/ tmp /緩存/資產刪除一切

  2. 添加config.serve_static_assets = false到development.rb或test.rb(學分@Agustin)

  3. 重新啓動服務器。

  4. 確保您的application.js/.css沒有緩存在瀏覽器中。轉到http://localhost:3000/assets/application.js?body=1並按ctrl + f5強制刷新(您也可以嘗試在最後添加一個隨機數參數:http://localhost:3000/assets/application.js?body=1&rnd=12343 如果您還有其他東西,並且ctrl + f5仍然沒有幫助,則需要清除瀏覽器的緩存。

跳過以下步驟之一返回緩存的application.js /的CSS與我的單個文件的更新衝突。

+0

上帝,這是煩人的...這裏還沒有運氣 –

+0

有什麼東西在公共場所緩存嗎?檢查頁面,並確保application.css沒有被服務兩次(或包含代碼)...我知道你的感受,這是非常煩人的。 – Abdo

37

目前(2012年9月24日)在軌/鏈輪的錯誤造成的它不能正確檢測導入的文件。

這應該在rails 3.2.9中修復後來但在此同時,你可以解決它,如下所示:

  1. 殺軌實例
  2. 室射頻TMP /緩存
  3. 啓動rails實例

你應該現在正在看到正確的CSS。

+1

彼得,你能提供一個鏈接到這個bug嗎? –

+0

只是想指出,這正是我需要做的。在開發中設置開關後清空緩存做了竅門 – FireDragon

+0

當我做了gem更改時導致rails運行,導致'twitter-bootstrap-rails'導致陳舊的css。銷燬該文件夾,全部修復。謝謝。 – ZMorek

4

的最佳途徑,這對我的工作就是刪除TMP /緩存的內容/ *目錄...

1

我有同樣的問題。儘管清除了tmp/cache和public/assets,但縮小的application.css仍然被緩存起來並從某個地方提供服務,並且我對個別css文件的更改未得到滿足。

這爲我工作:在application.css 刪除行*= require_self

重啓服務器

似乎移除緩存,如果你點擊application.css在瀏覽器中源,你將不再請參閱縮小版本

*= require_self替換回該文件並繼續開發。

3

,對我們工作的事情是,設置「config.assets.debug =假」

此不再設置HTML CSS包括作爲HREF =「/資產/自舉new.css?體= 1」 ,而是將其設置爲href =「/ assets/bootstrap-new.css」,我認爲這是問題所在。

0

我需要一個最後一步,但我弄明白了。下面是我所做的:

  1. 關閉軌道服務器
  2. 耙資產:清潔
  3. 耙TMP:明確
  4. 重啓軌服務器

然後,我刷新我的屏幕Google Chrome和IT仍然無法使用。所以,我啓動了Firefox和瞧,它實際上工作。這意味着Chrome會緩存瀏覽器中的舊文件。於是,我在Chrome中清除了瀏覽器緩存,並且它工作正常!

0

我知道這是一個古老的問題,但是對我來說一個修復方法是我有nginx代理到我的開發環境,並且在配置中有一個location ~ ^/(assets)/塊。請將其註釋掉,或嘗試重新啓動nginx以使緩存無效。如果你正在開發,你可能只想完全評論它。

我失去了太多的時間解決這個問題,直到我記得那件事。