2014-09-13 2 views
0

Я использую некоторые пользовательские шрифты в приложении Rails 4.1. Они находятся здесь:Конвейер Rails: почему мои пользовательские шрифты работают в разработке, но не в производстве?

app/assets/fonts/MyCustomFont.ttf 

Я ссылки на них в моей таблице стилей (SASS):

@font-face 
    font-family: "MyCustomFont" 
    src: url("MyCustomFont.ttf") format('truetype') 

h1 
    color: #fff 
    font-family: "MyCustomFont" 

В режиме разработки, он правильно делает мой шрифт. Когда я раскрываю к производству, я вижу, шрифт, упомянутый в журнале:

** Execute assets:precompile 
I, [2014-09-12T23:46:40.077333 #12473] INFO -- : Writing /var/www/apps/10121/releases/c655762f076df708896b622c12429c8bf76f21ec/public/assets/MyCustomFont-18108066511bb5b3ddfd0454b738e8d5.ttf 

Однако, когда я загрузить страницу в браузере он не делает пользовательский шрифт. Консоль веб-инспектор показывает ошибку:

Failed to load resource: the server responded with a status of 404 (Not Found) http://example.com/assets/MyCustomFont.ttf

Когда я набираю в URL шрифта, используя имя файла, перечисленных в журнале:

http://example.com/assets/MyCustomFont-18108066511bb5b3ddfd0454b738e8d5.ttf

Затем браузер запускает загрузку файла. Так что кажется, что это просто вопрос ссылки на файл в неправильном месте.

Как я могу решить эту проблему и как правильно обращаться к шрифту, чтобы он работал в процессе производства при компиляции активов?

+0

Вы пытались запустить 'rake assets: precompile' –

+0

Как я уже сказал, активы компилируются при развертывании на производство (и даются образцы выходных данных журнала). Вы не хотите запускать эту команду в режиме разработки. – Andrew

ответ

3

Прекомпиляция

Классический вопрос - это в основном вниз к precompilation процессу Rails (как отпечатки пальцев файлов и т.д.), и вы не вызывающей dynamic FilePath (который создается в результате этого precompilation процесса)

Вы звоните следующее:

#app/assets/stylesheets/application.css.sass 
@font-face 
    font-family: "MyCustomFont" 
    src: url("MyCustomFont.ttf") format('truetype') 

Это будет работать в развитии, потому что MyCustomFont.ttf будет доступен в папке с ресурсами. Однако, когда нажимается на производство (и, следовательно, имеет отпечатки пальцев прилагается, и перемещено в папку public/assets), ваша статическая ссылка не будет работать

Вместо этого, вы будете лучше всего с помощью asset_url помощника:

#app/assets/stylesheets/application.css.sass 
@font-face 
    font-family: "MyCustomFont" 
    src: asset_url("MyCustomFont.ttf") format('truetype') 

Это будет ссылка на динамический файл, а не на статическую, что означает, что процесс предварительной компиляции должен работать!

+1

Я узнал, что вы также можете вызвать 'font_url' и получить тот же результат. – Andrew

Смежные вопросы