2014-09-24 89 views
1

我有一個在Heroku上運行的rails 4.1應用程序,我看到一個靜態資產問題。 每當我的應用程序請求任何非svg版本的字體資產(由font-awesome-rails寶石提供)時,它們都不會被提供。所有其他資產似乎服務良好。Rails 4.1在Heroku上不提供字體超讚的資產

> curl http://myapp.herokuapp.com/assets/fontawesome-webfont-701cf412b1cf188f7e15450446d7cd04.ttf 
## gives 404 response even though the file exists in public/assets on heroku 

> curl http://myapp.herokuapp.com/assets/fontawesome-webfont-4835d3d33b92d5c7c8c58149959d075d.svg 
## gives 200 response and serves the file 

看來,所有這些資產已成功預編譯,並存儲在public/assets(下面是heroku bash)。

$ ~/public/assets $ ls -l fontawesome-webfont-* 

-rwx------ 1 u31786 31786 38205 2014-05-16 19:57 fontawesome-webfont-0c7d84c1c574b8bae138a7014e781a1c.eot 
-rwx------ 1 u31786 31786 80652 2014-05-16 19:57 fontawesome-webfont-103111d81ddabc2cf4abea9d8a922fb8.ttf 
-rwx------ 1 u31786 31786 202148 2014-05-16 19:57 fontawesome-webfont-1bc7b8f24d224d2cce2fdff63d829fb8.svg 
-rwx------ 1 u31786 31786 253487 2014-07-04 02:17 fontawesome-webfont-434a869d64e7a46581d538486a8af044.svg 
-rwx------ 1 u31786 31786 202148 2014-05-16 19:57 fontawesome-webfont-4835d3d33b92d5c7c8c58149959d075d.svg 
-rwx------ 1 u31786 31786 44432 2014-05-16 19:57 fontawesome-webfont-4daf533148b5cd2067fa92a25d911a2b.woff 
-rwx------ 1 u31786 31786 44432 2014-05-16 19:57 fontawesome-webfont-641588c6e43238bf5012415aa7d8f6c9.woff 
-rwx------ 1 u31786 31786 141564 2014-07-04 02:17 fontawesome-webfont-701cf412b1cf188f7e15450446d7cd04.ttf 
-rwx------ 1 u31786 31786 83760 2014-07-04 02:17 fontawesome-webfont-8613891d251955c3898dc19ee822a763.woff 
-rwx------ 1 u31786 31786 72449 2014-07-04 02:17 fontawesome-webfont-97abc2bd68ee5cc83cf9f5386cfc7912.eot 
-rwx------ 1 u31786 31786 38205 2014-05-16 19:57 fontawesome-webfont-b921a0d9014189177e286b16478a6680.eot 
-rwx------ 1 u31786 31786 80652 2014-05-16 19:57 fontawesome-webfont-e21e874c038a38923c7e064e8606b135.ttf 

好像我不應該需要的字體文件類型添加到config.assets.precompile的建議here(我試過了,沒有幫助)。該資產似乎被預編譯成功,因爲它被放置到public/assets,但不知何故不由Rails提供服務。

資產在public/assets中如何以正確的權限存在,但不能通過Heroku上的Rails通過http獲得?是否有任何其他Rails配置設置會影響到這一點?

謝謝。

回答

1

原來,我的應用程序有一個版本的機架比比中間件寶石這會導致無法送達的文件類型的。 (與this相同)。升級寶石解決了這個問題。

0

只需添加字體資產編譯

配置/ production.rb

Rails.application.configure do 
    . . . 
    config.assets.precompile += %w( 
    *.svg *.eot *.woff *.ttf *.png *.jpg *.jpeg *.gif 
) 
    . . . 
end 
+0

我在我的問題中提到資產正在成功編譯。默認情況下,Rails預編譯「application.js,application.css和所有非JS/CSS」(來自Rails自動生成的application.rb中的註釋) – stupakov 2014-09-26 06:07:43

0

嘗試多種解決方案之後,我已經能夠解決使用資產助手這個問題,因爲在字體awesome.css建議導軌導向:

@font-face { 
    font-family: 'FontAwesome'; 
    src: url('<%= asset_path("fontawesome-webfont.eot")%>?v=4.2.0'); 
    src: url('<%= asset_path("fontawesome-webfont.eot")%>?#iefix&v=4.2.0') format('embedded-opentype'), 
     url('<%= asset_path("fontawesome-webfont.woff")%>?v=4.2.0') format('woff'), 
     url('<%= asset_path("fontawesome-webfont.ttf")%>?v=4.2.0') format('truetype'), 
     url('<%= asset_path("fontawesome-webfont.svg")%>?v=4.2.0#fontawesomeregular') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

記住文件重命名爲包括。 ERB擴展:字體awesome.css.erb

Rails Guides: The Asset Pipeline

2.3.1 CSS和ERB

資產管道自動評估ERB。這意味着如果你添加一個erb擴展到一個CSS資源(例如application.css.erb),那麼像asset_path這樣的助手可以在你的CSS規則中使用:

.class {background-image:url(<%= asset_path'image.png'%>)} 這會將路徑寫入正在引用的特定資產。在這個例子中,在一個資產加載路徑中有一個圖像是有意義的,比如app/assets/images/image.png,這將在這裏被引用。如果此圖像已作爲指紋文件在公共/資產中可用,則會引用該路徑。

如果您想要使用數據URI - 將圖像數據直接嵌入CSS文件的方法 - 您可以使用asset_data_uri helper。

logo { background: url(<%= asset_data_uri 'logo.png' %>) } 這將格式正確的數據URI插入到CSS源代碼中。

請注意,結束標記不能是樣式 - %>。

相關問題