簡體   English   中英

Rails 4.1不在Heroku上提供超棒的字體資源

[英]Rails 4.1 not serving font-awesome assets on Heroku

我有一個在Heroku上運行的Rails 4.1應用程序,我看到一個靜態資產問題。 每當我的應用請求任何非svg版本的字體資產(由font-awesome-rails gem提供)時,都不會提供它們。 其他所有資產似乎都可以正常使用。

> 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 (我嘗試過,但沒有幫助)。 由於該資產已放入public/assets ,因此似乎已成功進行了預編譯,但是Rails無法提供該資源。

具有正確權限的資產如何可能存在於public/assets ,而Heroku上的Rails無法通過http獲得public/assets 是否有其他會影響此的Rails配置設置?

謝謝。

原來,我的應用程序有一個版本的rack-zippy Middleware gem,該版本導致這些文件類型無法提供。 (與相同)。 升級寶石可以解決該問題。

只需將字體添加到資產編輯中

配置/ production.rb

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

在嘗試了多種解決方案之后,我能夠按照font-awesome.css中的rails guide的建議,使用資產助手來解決此問題:

@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擴展名:font-awesome.css.erb

Rails指南:資產管道

2.3.1 CSS和ERB

資產管道會自動評估ERB。 這意味着,如果將erb擴展名添加到CSS資產(例如application.css.erb),則CSS規則中將提供諸如asset_path之類的幫助器:

.class {background-image:url(<%= asset_path'image.png'%>)}這會將路徑寫入到所引用的特定資產。 在此示例中,在資產加載路徑之一(例如app / assets / images / image.png)中具有圖像將是有意義的,此處將對其進行引用。 如果此圖像已在公共/資產中作為指紋文件可用,則將引用該路徑。

如果要使用數據URI(將圖像數據直接嵌入CSS文件中的方法),則可以使用asset_data_uri幫助器。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM