2015-05-06 3 views
2

У меня есть приложение для рельсов 4.2, используя rack-cors. Ни один из моих значков, похожих на шрифт, не появляется, хотя все мои другие активы в порядке. Я использую rackspace cdn. Мой CDN URL выглядит что-то вродеИспользование стойки с Rackspace CDN-проблемы

http://ddf908e003b5678bc25-9d6bfcdc12345678ba868a15bca98.r12.cf5.rackcdn.com/assets/main-4f3595479ce96112e1b8ab4e5357fc26.css 

My стоечные-Корс конфигурации в моей config/application.rb

config.middleware.insert_before 0, "Rack::Cors" do 
    allow do 
    origins 'localhost:3000', /^http:\/\/\w+.+rackcdn.com/ 
    resource '/assets/*', headers: :any, methods: :get 
    end 
end 

Иконки отображаются локально просто отлично. Только в производстве они не показывают. Любые идеи о том, что я могу потерять?

EDIT

Я использую font-awesome-sass камень. Когда я просматриваю страницу, у меня нет ошибок javascript или чего-то еще, только предупреждение CORS и никаких значков.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://ddf908e003b5678bc25-9d6bfcdc12345678ba868a15bca98.r12.cf5.rackcdn.com/assets/main-4f3595479ce96112e1b8ab4e5357fc26.css/assets/font-awesome/fontawesome-webfont-e9c0e802c2b0faf4d660e2bff17b5cf1.woff. This can be fixed by moving the resource to the same domain or enabling CORS. 

EDIT 2

Я использую asset_sync, чтобы помочь установить пользовательские заголовки, которые Ash Вильсон предложил делать.

AssetSync.configure do |config| 
    config.fog_provider = 'Rackspace' 
    config.rackspace_username = ENV['RACKSPACE_USERNAME'] 
    config.rackspace_api_key = ENV['RACKSPACE_API_KEY'] 
    config.fog_directory = ENV['FOG_DIRECTORY'] 
    config.fog_region = ENV['FOG_REGION'] 
    config.gzip_compression = true 
    config.manifest = true 
    config.custom_headers = { 
    "\.(ttf|otf|eot|woff|svg)$" => { 
     "Access-Control-Allow-Origin" => "*", 
     "Access-Control-Request-Method" => "*", 
     "Access-Control-Allow-Methods" => "*" 
    } 
    } 
end 

Я пока не делаю кеширования на своем конце, но я был уверен, что очистил любой кеш браузера. Я также нашел 2 файла, которые жаловались .woff и .ttf на панели управления, как упоминал об этом Ash, и я добавил в нее заголовки вручную. Тем не менее, я все еще вижу ту же проблему. Может быть, есть еще один шаг, или, возможно, AssetSync просто мертв и не работает?

РЕДАКТИРОВАТЬ 3

Вот заголовки из завитка. Похоже, что заголовки CORS находятся там. Весь день ждал пропаганды, но все равно не пошел.

curl -i -s -XHEAD http://ddf908e003b5678bc25-9d6bfcdc12345678ba868a15bca98.r12.cf5.rackcdn.com/assets/font-awesome/fontawesome-webfont-e0e0f28a0197446b28f818aa81b80530.ttf 

HTTP/1.1 200 OK 
Content-Length: 112160 
Last-Modified: Thu, 07 May 2015 16:49:12 GMT 
Accept-Ranges: bytes 
Access-Control-Request-Method: * 
ETag: c4668ed2440df82d3fd2f8be9d31d07d 
X-Timestamp: 1431017351.82062 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, HEAD, OPTIONS 
Content-Type: application/font-sfnt 
X-Trans-Id: tx53b90a9b638141c6874e6-00554bf992iad3 
Cache-Control: public, max-age=259200 
Expires: Sun, 10 May 2015 23:47:30 GMT 
Date: Thu, 07 May 2015 23:47:30 GMT 
Connection: keep-alive 
+0

Вы проверили консоль JavaScript, чтобы увидеть, если ваши ресурсы идут через? Могут появляться сообщения об ошибках. Кроме того, шрифт-awesome требует, чтобы ваши файлы шрифтов служили, поэтому убедитесь, что вы используете это через CDN, а не только CSS и JavaScript. –

+0

Я не получаю никаких ошибок, просто предупреждение CORS.Я обновил свой вопрос, чтобы добавить дополнительную информацию. – jeremywoertink

+0

Возможно, это не проблема с вашими заголовками. Вероятно, с заголовками Rackspace. Можете ли вы использовать «curl -v» в URL-адресе для печати заголовков? Если Rackspace CDN не устанавливает правильные заголовки CORS, я не уверен, как вы можете это исправить. –

ответ

1

Чтобы получить CORS работает должным образом, вам необходимо установить заголовки CORS на объекте Cloud Files на конец Rackspace, а не те, обслуживаемых вашим приложением. Вы можете сделать это с control panel, нажав на значок шестеренки рядом с каждым файлом:

control panel

Cloud Files documentation включает в себя раздел заголовков CORS, которые поддерживаются и то, что каждое средство.

Если у вас есть большое количество активов или процесс сборки, который их автоматически публикует, вы захотите использовать API или SDK, чтобы их установить. developer documentation содержит фрагмент кода, который вы можете принять для этого; замените «Access-Control-Allow-Origin» или другие соответствующие заголовки для «Content-Type».

Вот полный пример использования рубин SDK, туман:

require 'fog' 

# Authenticate 
@client = Fog::Storage.new(
    :provider => 'rackspace', 
    :rackspace_username => '{username}', 
    :rackspace_api_key => '{apiKey}', 
    :rackspace_region => '{region}' 
) 

# Find the file object 
@directory = @client.directories.get("{container name}") 
@file = @directory.get("{file name}") 

# To only allow CORS requests from a page hosted at 'my-domain.com' 
# You can also set this to '*' to allow CORS requests from anywhere 
@file.access_control_allow_origin = "http://my-domain.com" 
@file.save 
+0

Я ценю действительно подробный ответ. К сожалению, у меня все еще такая проблема. Не кэширование ничего на моем конце, но на всякий случай очистил весь кеш браузера. Вручную установите заголовки на панели управления для тестирования. Я использую AssetSync. Я обновлю свой вопрос, чтобы показать последние изменения. – jeremywoertink

+0

Хмм. Я не думал, что вам нужно будет ждать изменений заголовков для распространения на CDN, как вы делаете для изменений контента, но я мог ошибаться. Можете ли вы попробовать использовать новый контейнер («каталог»)? –

+1

Еще один способ проверить заголовки - использовать завиток с общедоступными URL-адресами http или https: curl -i -s -X HEAD http: // ... –