Лучшая обработка активов Rails 3 для `cap deploy`

Я заметил, что по умолчанию задача «развертывания» выполняет предварительную компиляцию ресурсов на удаленной машине, что имеет следующие негативные последствия:

  • Странные глючные ассеты во время предварительной компиляции (на живом сайте)
  • Ошибки в конфигурации вызывают простои с кодом ответа 500
  • Задача на долгое время

Я видел это, что немного смягчает проблему, не заставляя вас выполнять предварительную компиляцию, когда вам нечего предварительно компилировать: Ускорение ресурсов: предварительная компиляция с помощью развертывания Rails 3.1 / 3.2 Capistrano

Но должно быть лучшее решение.

Кто-нибудь пробовал это:

  1. Всегда выполняйте развертывание в «промежуточном» месте, где вы можете все протестировать, а затем добавить какую-то cap enliven задачу, которая каким-то образом сообщает веб-интерфейсу о необходимости начать использовать другой порт? (Я мог бы справиться с этим вручную, отредактировав nginx upstream и перезапустив его, затем я мог бы немного автоматизировать это с помощью включения в nginx.conf и задачи ограничения, чтобы связать это вместе.)
  2. Выполните предварительную компиляцию локально, а затем просто отправьте файлы через rsync. Я предпочитаю №1, но это будет меньший шаг, который, вероятно, будет работать как лучший вариант по умолчанию, чем текущее поведение.

Я упускаю что-то очевидное? Я новичок в развертывании ресурсов Rails + Capistrano, но похоже, что лучшие практики развертывания недоступны прямо из коробки для этого.


person rking    schedule 05.08.2012    source источник


Ответы (1)


Вы можете:

  • предварительно скомпилировать активы перед развертыванием
  • скомпилировать его на стороне сервера в фоновом режиме
  • оставьте это delayed_job или другой системе управления очередью
person Alexander Zinchenko    schedule 26.08.2012
comment
Привет, Александр! Если вы прекомпилируете, как вы интегрируете это в Capistrano deploy, чтобы он не прекомпилировался на сервере? - person rking; 31.08.2012
comment
Я не уверен, но если локально предварительно скомпилированные ресурсы могут использоваться на сервере, вы можете предварительно скомпилировать их, а затем загрузить на сервер, используя методы загрузки Capistrano. - person Alexander Zinchenko; 13.10.2012