Компилируйте активы автоматически и обслуживайте их с помощью nginx (разработка)
Я работаю над приложением Rails с большим количеством активов, что, к сожалению, не может быть уменьшено. В производстве это не проблема, но в разработке ~ 20 запросов ресурсов за каждую страницу не могут быстро обслуживаться сервером приложений (например, webrick или Thin).
Итак, я начал использовать nginx в разработке для обслуживания чего-либо в public/assets
. Обратите внимание, что nginx - это просто средство разработки - мы не намерены использовать его в производстве.
Для этого мне просто нужно было сделать две вещи:
- Установите
config.assets.debug
на false
- run
rake assets:precompile
К сожалению, есть две проблемы (последняя самая важная) с моей настройкой:
- Для каждого изменения активов требуется снова запустить
rake assets:precompile
- Чтобы сервер приложений мог собирать вновь скомпилированные активы, я должен перезапустить его.
Что такое правильная настройка nginx/Asset Pipeline, которая не требует перезапуска сервера Rails после предварительной компиляции?
Автоматическая компиляция также будет приветствоваться.
Ответы
Ответ 1
Эта настройка работала для меня:
- Включите порт nginx в
config.asset_host
-
config.assets.debug = false
-
config.assets.digest = true
-
config.assets.compile = true
- перед запуском сервера Rails запустите
rm -rf public/assets; rake tmp:clear tmp:cache:clear assets:clean assets:precompile
- запустить сервер Rails
- При каждом изменении активов снова запустите
rake assets:precompile
. Охрана может позаботиться об этом.
Ответ 2
Это может потребовать больших усилий, но подумайте о переходе на gulp или хрюкать, чтобы скомпилировать активы. Использование node js может ускорить процесс значительно (много статей на нем, вот пример http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/).
А также важные активы могут быть скомпилированы без перезагрузки сервера (процесс запускается при смене файла [hooks]). В проекте, в котором я участвую, один из наших ребят пытается сделать такой переключатель, и из того, что он говорит, я понимаю, что это не однодневная задача.