Я заметил, что по умолчанию задача «развертывания» выполняет предварительную компиляцию ресурсов на удаленной машине, что имеет следующие негативные последствия:
- Странные глючные ассеты во время предварительной компиляции (на живом сайте)
- Ошибки в конфигурации вызывают простои с кодом ответа 500
- Задача на долгое время
Я видел это, что немного смягчает проблему, не заставляя вас выполнять предварительную компиляцию, когда вам нечего предварительно компилировать: Ускорение ресурсов: предварительная компиляция с помощью развертывания Rails 3.1 / 3.2 Capistrano
Но должно быть лучшее решение.
Кто-нибудь пробовал это:
- Всегда выполняйте развертывание в «промежуточном» месте, где вы можете все протестировать, а затем добавить какую-то
cap enliven
задачу, которая каким-то образом сообщает веб-интерфейсу о необходимости начать использовать другой порт? (Я мог бы справиться с этим вручную, отредактировав nginxupstream
и перезапустив его, затем я мог бы немного автоматизировать это с помощью включения вnginx.conf
и задачи ограничения, чтобы связать это вместе.) - Выполните предварительную компиляцию локально, а затем просто отправьте файлы через rsync. Я предпочитаю №1, но это будет меньший шаг, который, вероятно, будет работать как лучший вариант по умолчанию, чем текущее поведение.
Я упускаю что-то очевидное? Я новичок в развертывании ресурсов Rails + Capistrano, но похоже, что лучшие практики развертывания недоступны прямо из коробки для этого.