2013-10-27 185 views
0

啊,我從這個資產中獲取頭痛:預編譯的東西。當我第一次將應用推送到heroku時,我在本地預先製作了它們。這一切都很好,但之後它不會在開發之後對css文件進行任何更改,因爲它提供了預編譯資源。所以現在,對於視覺事物,我必須做耙子資產:乾淨。我在本地做了我想要的應用程序的更改,沒有任何問題。然後,我再次預編譯了資產,並將更改推送到了heroku,但現在看起來它甚至不會看到我的資產。頁面上只有白色的東西,沒有任何樣式。rake資產:預編譯heroku不接收

請幫忙!

回答

0

您遇到與2份Heroku的系統的問題:


Asset Fingerprinting

資產指紋基本上增加了一個MD5哈希到您的資產文件的結尾,讓他們獨特&依賴他們在文件中有任何關係。這一點很重要,因爲每次編譯你的資產時,便產生這些新的文件名,這會導致標準的CSS弄亂

您需要與所有在你的CSS你的資產的引用來做到這一點:

變化你的CSS文件爲.css.scss

與靜態CSS不同,SCSS是動態編譯的,可以解析ruby代碼。這意味着,你可以參考一下你的資產是這樣的:

background-url: asset_url('/nav_bar/nagivgation_bg.png'); 

這樣做對你的CSS文件和引用應該沒關係


Serve Static Assets

的Heroku需要你跑靜態資產在Rails中。這是很簡單的事:

#/config/environments/production.rb 
config.serve_static_assets = true 

更新

下面是一些活的代碼來演示,其中包括在.scss文件動態助手:

.confirmation .action_bar a.confirm { 
     color: #fff; 
     background: asset_url('modals/confirm_button/bg.png') top repeat-x; 
     position: relative; 
     margin: 0 0 0 7px; 
} 
+0

對不起,因爲我對heroku的所有資產都有點新鮮感。我的css文件已經是.css.scss。我應該在哪裏放置這段代碼:background-url:asset_path('/ nav_bar/nagivgation_bg.png'); –

+0

沒問題 - 我只是提出了一個香草答案,因爲我不知道你有多少經驗:) asset_path的東西是你如何在.scss中使用動態路徑的一個例子 - >它實際上應該是「asset_url」 ,並基本上取代你所擁有的任何url()(因爲它們只會引用靜態文件)。我已經更新了我的答案,並提供了一個實例 –

+0

我不認爲我在scss文件中有任何網址。 –