Rails 3.1.1 конвейер активов Heroku кеширование гоча - PullRequest
10 голосов
/ 26 октября 2011

В двух словах проблема в том, что в режиме разработки мы вносим изменения в файлы CSS или JS, но всегда получаем кэшированные / старые версии этих файлов. Ничто из того, что я сделал, не имело никакого эффекта. Я проверял конфигурацию десятки раз и пробовал каждую комбинацию значений конфигурации, но всегда получал одинаковые результаты: устаревшие / кэшированные файлы. Я должен был на самом деле работать в производственном режиме и перезапускать сервер после каждого изменения, чтобы проверить.

Я потратил несколько дней на то, чтобы разобраться с этой проблемой, посмотрел на десятки вопросов о переполнении стека в конвейере ресурсов, но так и не нашел того, который касался этого вопроса, поэтому я решил опубликовать его здесь для потомков.

Мы используем Heroku и прекомпилируем наши ресурсы, потому что Heroku не может выполнить предварительную компиляцию для нас (мы также используем devise, который, очевидно, является причиной сбоя предварительной компиляции heroku). Поэтому, чтобы отправить наши предварительно скомпилированные активы в Heroku, мы должны проверить их на git.

Вот проблема .

Когда мы обновились до Rails 3.1.1 , прекомпиляция ресурса произвела файлы как с хешем MD5 в имени, так и без него. Я не особо задумывался над этим и пошел дальше и проверил все эти файлы, чтобы я мог подтолкнуть Герою. Некоторое время спустя я заметил проблему с кэшированными результатами в режиме разработки. Предварительно скомпилированные и проверенные ресурсы без хэшей MD5 обслуживались из / public / assets как статические файлы, что не позволяло нам видеть какие-либо изменения, которые мы вносили в /app/assets.

.

После того, как я наконец понял это, я запустил git rm / public / assets и все снова работает. Итак, вывод: Будьте внимательны, проверяя активы в git!

Чтобы превратить это в вопрос: как это делают другие? Я что-то упускаю из виду? Что мне действительно нужно, так это чтобы Heroku предварительно скомпилировал мои ресурсы для меня, но это происходит из-за ошибки соединения с БД, которую я собираю из-за устройства. Я надеялся, что Rails 3.1.1 это исправит, но это не так.

Ответы [ 3 ]

12 голосов
/ 02 ноября 2011

Вы уже проверяли эту разработку на github?В частности, Хосе Валим говорит, что

В Rails 3.1.1 final есть метод config.assets.initialize_on_precompile.Если вы установите для него значение false, у вас все получится, но оно не позволит вам получить доступ к информации о модели ваших активов (что вам, вероятно, в любом случае не следует).

Может быть, это позволит прекомпилироватьслучиться на Heroku для тебя.

1 голос
/ 01 февраля 2012

Причина, по которой прекомпиляция актива не работает, может заключаться в том, что переменные Heroku ENV отсутствуют при компиляции слагов (развертывание), как указано здесь:

http://devcenter.heroku.com/articles/rails31_heroku_cedar

Существует(экспериментальный) способ включить ENV-переменные во время развертывания именно по этой причине, найдите информацию здесь:

http://devcenter.heroku.com/articles/labs-user-env-compile

Надеюсь, это поможет.

0 голосов
/ 26 октября 2011

Проверьте это руководство от Heroku.В нем описаны 3 способа развертывания приложений Rails 3.1.Два из них не требуют локальной прекомпиляции.

...