Актив конвейера при обновлении до Rails 3.1 на Heroku - PullRequest
5 голосов
/ 03 сентября 2011

Я только что обновил свое приложение на Heroku с Rails 3.0 до 3.1 и пытаюсь заставить работать конвейер ресурсов. Основная проблема заключается в том, что я могу прочитать из журнала heroku следующие виды строк для каждого актива:

2011-09-03T16:35:28+00:00 app[web.1]: cache: [GET /assets/border-a3c571a354b9381740db48aeebfaa63a.jpg] miss

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

Читая документы Heroku, вы можете найти это объяснение:

Rails 3.1 provides an assets:precompile rake task to allow the compilation penalty to be paid up front rather than each time the asset is requested. If this task exists in your app we will execute it when you push new code.

Но какой должна быть задача "assets: precompile"? Я попытался создать проект с использованием rails 3.1 с нуля, чтобы попытаться выяснить это, но в голом проекте такой задачи нет. Или я что-то упустил? Как я могу сделать так, чтобы активы находились в кеше? Возможно, это просто проблема с конфигурацией.

Это параметры моего производственного конфигурационного файла:

config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = true # If I turn this off I get a 500 error and logs say that an  asset isn't compiled

В моем application.rb есть эта строка:

config.assets.enabled = true

Большое спасибо за вашу помощь!

Ответы [ 4 ]

5 голосов
/ 18 декабря 2011

Также взгляните на http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

Для более быстрой прекомпиляции ресурсов вы можете частично загрузить свое приложение установив config.assets.initialize_on_precompile в false in config / application.rb, хотя в этом случае шаблоны не могут видеть прикладные объекты или методы. Героку требует, чтобы это было ложным

4 голосов
/ 21 сентября 2011

Мне было интересно то же самое, но вот совет, который поможет выяснить, является ли ваш ресурс компиляцией в реальном времени или нет

  1. пробег rake assets:precompile локально
  2. внести некоторые изменения в свой CSS, но не перезапускать задачу рейка
  3. git add, commit и push to heroku

Если изменения, внесенные на шаге 2, отображаются на heroku, то вы знаете, что ваше приложение компилируется в реальном времени

Не забывайте, что теперь вы отвечаете за кэширование http, так как Varnish больше не включен в celadon, поэтому вам нужно настроить кеш-стойку и memcached самостоятельно:

Но да, я тоже нашел это загадкой

1 голос
/ 09 сентября 2011

Убедитесь, что вы в стеке Heroku "Cedar" . Тогда Heroku автоматически прекомпилирует ваши активы во время компиляции слагов .

Примечание: я все еще получаю "промах кэша", но я не думаю, что это действительно так, потому что ваше приложение не будет работать, если ваши ресурсы не скомпилированы.

1 голос
/ 04 сентября 2011

Можете ли вы попробовать с config.serve_static_assets, установленным на true и

config.action_dispatch.x_sendfile_header = "X-Sendfile"

добавлено в ваш config/environments/production.rb файл?

Когда вы отправляете свой код в Heroku, вы должны увидеть прекомпиляцию, объявленную компилятором слагов AFAICT.

...