рельсы 3.1 на Heroku - Javascripts не кэшируется - PullRequest
1 голос
/ 03 ноября 2011

Я развернул приложение Rails на Heroku (тонкий веб-сервер).

Когда я нажимаю, я вижу, что ресурсы правильно скомпилированы (Запуск: рейк-активы: прекомпиляция)

Однако, когда я захожу на сайт своего приложения и просматриваю две страницы с одинаковым предварительно скомпилированным заголовком

<head>
<-- ... other stuffs ... -->  
  <script src="/assets/application-5452d0cdbf85c04748c35fac325cd1d7.js" type="text/javascript"></script>

</head>

Я вижу (Chrome подтвердил это [примечание: отключить кэш установлен на: нет в инструментах разработчика] и Safari & Firefox с той же медленностью), что файл перезагружается.

Логи Heroku подтверждают это

Heroku logs
2011-11-03T11:03:08+00:00 app[web.1]: cache: [GET /assets/application-5452d0cdbf85c04748c35fac325cd1d7.js?_=1320318188543] miss

При просмотре нескольких веб-сайтов кажется, что для статического содержимого настройку необходимо выполнить на веб-сервере уровня, а в документах ruby ​​объясняется, как это сделать для apache (http://guides.rubyonrails.org/caching_with_rails.html).

It’s the responsibility of the web server you use to set the far-future expiration date on cache assets that you need to take advantage of this feature. 

Есть ли опыт работы с thin и как настроить срок действия активов js?

спасибо

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

После двух дней исследований я выяснил, в чем дело.

«Ответственный» - это jquery и способ обработки Ajax-вызовов

jQuery.ajax ()

cacheBoolean По умолчанию: true, false для dataType 'script' и 'jsonp' Если установлено значение false, браузеры не будут кэшировать запрашиваемые страницы. Если для кеша установлено значение false, к URL-адресу также добавляется параметр строки запроса "_ = [TIMESTAMP]".

Добавление следующего кода устранило мою проблему

<script>
        $.ajaxSetup({ cache: true});
</script>

Тогда браузер сможет перезагрузить его должным образом (я вижу в инструменте разработчика для этого конкретного javascript: Size (from cache) - Time: 11ms). Кроме того, способ, которым rails подписывает предварительно скомпилированные ресурсы, позволит мне правильно их перезагружать, если я внесу изменения в javascript (также протестировано, включенный в заголовок изменен с

<script src="/assets/application-158fadc43ade74e58a8087ec8b95e760.js" type="text/javascript"></script>

до

<script src="/assets/application-5452d0cdbf85c04748c35fac325cd1d7.js" type="text/javascript"></script>   

Это именно то поведение, которое я ожидал и искал.

0 голосов
/ 03 ноября 2011

В стеке кедра Heroku нет кэша лака, который исторически кешировал статические ресурсы, поэтому Rack Cache или аналогичные вам могут быть интересны.

Однако Rails должен устанавливать заголовки на ресурсах, сообщая вашему браузеру:кэшируйте их навсегда, оставляя это для обработки кэширования.

...