Компилируйте активы автоматически и обслуживайте их с помощью 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]). В проекте, в котором я участвую, один из наших ребят пытается сделать такой переключатель, и из того, что он говорит, я понимаю, что это не однодневная задача.