Heroku и @ font-face - встроенные шрифты не будет отображаться на Heroku

У меня есть несколько лицензированных шрифтов, которые я встроил в свой Приложение Rails с использованием тега CSS @ font-face . Эти шрифты расположены по пути "../ Public / Fonts /" в моем приложении Rails 3 и отлично отображаются на любом локальном компьютере, на котором я загружаю репозиторий и запускаю его.

Однако, когда я подтолкнуть мое приложение к Heroku, похоже, не удается найти шрифты. Вы можете сказать, что он ищет в каталоге шрифтов, но никогда не может получить к ним доступ. Кажется, не имеет значения, где я размещаю шрифты или как набираю путь к шрифту в объявлении @ font-face.

Мои шрифты находятся в # {RAILS.root} / public / fonts / ChunkFive

Вот мое объявление @ font-face:

@font-face {
font-family: "ChunkFive";
src: url("../fonts/ChunkFive/ChunkFive-webfont.eot");
src: local("?"),
url("../fonts/ChunkFive/ChunkFive-webfont.woff") format("woff"),
url("../fonts/ChunkFive/ChunkFive-webfont.ttf") format("truetype"),
url("../fonts/ChunkFive/ChunkFive-webfont.svg") format("svg");
}

Вот сообщение 404 ресурс не найден, которое я получаю для каждого шрифта:

Request URL:http://thedanbarrett.heroku.com/fonts/ChunkFive/ChunkFive-webfont.woff
Request Method:GET
Status Code:404 Not Found
Request Headers
Referer:http://thedanbarrett.heroku.com/home
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 
(KHTML,like Gecko) Chrome/8.0.552.224 Safari/534.10
Response Headers
Age:0
Connection:keep-alive
Content-Length:727
Content-Type:text/html
Date:Wed, 05 Jan 2011 15:25:21 GMT
Server:nginx/0.7.67
Via:1.1 varnish
X-Runtime:0.001344
X-Varnish:764492621

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

Public Function GetFileLastAccessTime(ByVal FilePath As String) As Date
    Dim fso As New Scripting.FileSystemObject
    Dim f As Scripting.File
    Set f = fso.GetFile(FilePath)
    GetFileLastAccessTime = f.DateLastAccessed
End Function

Вывод для рассматриваемого файла:

?getfilelastaccesstime("SomePath")
7/30/2010 2:16:07 PM 

Это значение, которое я получаю из свойств файла в Windows Exploder. Счастья.

Я портирую эту функциональность в приложение VB.Net. Новый код:

Public Function GetLastAccessTime(ByVal FilePath As String) As Date
    Return IO.File.GetLastAccessTime(FilePath)
End Function

Сама простота. Вывод:

?GetLastAccessTime("SomePath")
#7/30/2010 3:16:07 PM#

Час спустя.

Обе функции работают на одном компьютере, проверяя один и тот же файл. Я также пробовал использовать класс IO.FileInfo с тем же результатом. Я проверил тысячи файлов, и все они отключились на час. Другие свойства даты для времени создания и времени последнего изменения также отключены на один час.

Помогите!

Я забыл упомянуть в исходном сообщении, часовой пояс компьютера - CST, а летнее время в настоящее время не используется эффект.

Я воспроизвел проблему в 64-битной Windows 7 и 32-битной Windows XP.

Спасибо.

Обновление 1/6/2011:

Спасибо всем, кто предложил попытаться вычислить желаемую дату по всемирному координированному времени, используя соответствующие смещения часовых поясов. Сейчас я решаю, что рисковать не стоит. Для этого конкретного бизнес-требования гораздо лучше сказать, что значение даты не такое, как вы ожидали, потому что именно так работает API. Если я попытаюсь «исправить» это, то это будет моя собственность, и я бы предпочел этого не делать.

Просто ради удовольствия я попробовал использовать старый добрый Scripting.FileSystemObject через взаимодействие. Он дает ожидаемые результаты, которые согласуются с проводником Windows, с потерей производительности примерно в 5 раз по сравнению с System.IO. Если выяснится, что мне нужно получить даты, соответствующие тому, что есть в проводнике Windows, я укусил пулю и пойдем по этому пути.

Другой эксперимент, который я пробовал, касался прямого обращения к функции GetFileTime API в kernel32 через C #:

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetFileTime(
IntPtr hFile,
ref FILETIME lpCreationTime,
ref FILETIME lpLastAccessTime,
ref FILETIME lpLastWriteTime
);

Это привело к тому же поведению, что и System.IO, время в проводнике Windows отключилось на час.

Еще раз всем спасибо.

12
задан Mark Hurd 25 February 2012 в 11:20
поделиться