2013-05-06 50 views
5

我想要的字體添加到我的Rails應用程序在此之後進行預編譯是我做了什麼:Heroku的Rails的資產管道失敗添加字體

的字體到:

-app 
--assets 
---fonts 

SCSS:

@font-face { 
    font-family: LigatureSymbols; 

    src: font-url('LigatureSymbols211.eot'); 
    src: local('LigatureSymbols'), 
     font-url('LigatureSymbols211.eot?#iefix') format('embedded-opentype'), 
     font-url('LigatureSymbols211.woff') format('woff'), 
     font-url('LigatureSymbols211.ttf') format('truetype'), 
     font-url('LigatureSymbols211.svg#LigatureSymbols') format('svg'); 

    font-weight: normal; 
    font-style: normal; 
} 

production.rb

config.assets.paths << Rails.root.join('app', 'assets', 'fonts') 
config.assets.precompile += %w(.svg .eot .woff .ttf) 

但是,當我推到我的Heroku生產服務器我得到這個:

-----> Preparing app for Rails asset pipeline 
     Running: rake assets:precompile 
     I, [2013-05-06T06:21:07.804043 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-c5b7db18fa0fcd910e92fee751776047.eot 
     I, [2013-05-06T06:21:07.809822 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-09ff8be41a6bee98c834e9a278bb8b28.otf 
     I, [2013-05-06T06:21:07.812685 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-1f682b1be252dbf6182d606a185b603f.svg 
     I, [2013-05-06T06:21:07.819262 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-9e88765b872185b22e519da056cba9f0.ttf 
     I, [2013-05-06T06:21:07.829518 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-a2d90ca6deff46bfcf9cade63d4902ce.woff 
     I, [2013-05-06T06:21:07.838351 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/rails-5f9b3f343d9831cbf50b9bc980faf39b.png 
     I, [2013-05-06T06:21:17.072501 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/application-6af5b81b9fcc820f1d43b4135f00317e.js 
     rake aborted! 
     undefined method `[]' for nil:NilClass 
     (in /tmp/build_2snusxy9gm4d7/app/assets/stylesheets/application.css) 

我想在我的application.css添加required線,但將不能工作。

編輯:

我可以在運行服務器時,我的開發機器上訪問localhost:5000/assets/LigatureSymbols-2.11.eot。不知道這是否會有助於縮小什麼錯

編輯2:

代碼工作與註釋掉SCSS字體,是否有語法錯誤?

編輯3:

這是在跟蹤堆棧的頂部:

.../sprockets-2.9.2/lib/sprockets/sass_functions.rb:63:in `sprockets_context' 
.../sprockets-2.9.2/lib/sprockets/sass_functions.rb:42:in `font_url' 

是有什麼錯我font-url電話?

EDIT 4:

從字體文件名和改變SCSS來體現,但同樣的錯誤

移除破折號仍然存在

EDIT 5:

本地機器上生成的CSS:

@font-face { 
    font-family: LigatureSymbols; 
    src: font-url("LigatureSymbols211.eot"); 
    src: local("LigatureSymbols"), font-url("LigatureSymbols211.eot?#iefix") format("embedded-opentype"), font-url("LigatureSymbols211.woff") format("woff"), font-url("LigatureSymbols211.ttf") format("truetype"), font-url("LigatureSymbols211.svg#LigatureSymbols") format("svg"); 
    font-weight: normal; 
    font-style: normal; } 

回答

4

我發現了!奇怪的事情......可能是SASS中的一個錯誤。

如果我將代碼直接放在我的application.css所需的文件home.css.scss中,則會發生錯誤。

此外,如果我將字體SCSS放在單獨的文件(font.scss)和@import "font"中,它也會引發錯誤。

只有如果我需要我的application.css中的font.scss文件,資產管道會通過。

,如果我在application.css

+0

我在這裏添加了一個不是很好的答案:http://stackoverflow.com/a/36539357/1965639 通過將font.scss更改爲font.css並以不同方式包含它,我解決了該問題。 @邁克爾約翰斯頓指出我正確的方向。 – jjk 2016-04-11 19:09:54

0

將此添加到您的config/application.rb

config.assets.initialize_on_precompile = false 

我有類似的問題與Heroku,這有助於有時。 這是值得一試。讓我知道這是否有幫助。

+0

這已經在我的'config/application.rb'感謝您的建議,雖然 – 2013-05-06 06:02:31

2

刪除連字符。資產管道使用連字符來指紋資產並在字體路徑中使用連字符導致問題。

+0

將文件重命名爲'LigatureSymbols211'點任何和仍然會得到相同的錯誤。還是)感謝你的建議! – 2013-05-06 06:23:01

+0

你能訪問期望的網址上的字體嗎?即something.com/fonts/LigatureSymbols211.eot或something.com/LigatureSymbols211.eot – John 2013-05-06 06:35:45

+0

在我的本地機器/ dev服務器上,我可以在'/ assets/LigatureSymbols211.eot'和其他擴展中訪問。在預編譯中止之前,我在生產服務器上嘗試使用指紋,但它不起作用 – 2013-05-06 06:48:34

2

我得到了完全相同的錯誤,當我忘了改從文件擴展名使用font-url(...) VS asset-url(...,font) VS url(asset-path(...,font))當包括字體,他們所有的工作通過=require它沒有問題.css轉換成.scss。這爲我修好了。