Rails 5+, рабочий процесс разработки WebPacker и Docker - PullRequest
1 голос
/ 08 марта 2019

Одним из преимуществ использования Docker является единая среда для всей команды. Некоторое время назад я использовал Vagrant для объединения среды разработки в команде, и это работало довольно хорошо. Наш рабочий процесс был похож на:

  • Запустить vagrant up, команда загружает базовый образ, запускает сценарии подготовки. Он также отображает каталог из локальной файловой системы в контейнерную файловую систему.

  • Файл изменений в хост-системе, все изменения будут сопоставлены с гостевой файловой системой (контейнером), поэтому перезапуск контейнера не требуется.

Некоторые люди используют Docker для аналогичного рабочего процесса разработки, но я обычно использую docker-compose только для запуска спутниковых сервисов. И я всегда выполнял монолит Rails внутри операционной системы хоста, как изначально.

Так что мой рабочий процесс разработки довольно стандартный:

  • Все спутниковые службы работают и находятся внутри контейнеров Docker, у меня просто есть несколько открытых портов. Мне не нужно устанавливать много программного обеспечения для их поддержки, это хорошо.

  • Монолит Rails запускается в хост-ОС, поэтому каждый раз, когда я, например, JavaScript изменяю файл, WebPacker вступает в игру, перестраивает и применяет изменения без обновления страницы . Важно подчеркнуть, потому что обновление страницы занимает много времени, я не хочу обновлять страницу каждый раз, когда я изменяю файл JavaScript или CSS.

С Vagrant вышеприведенная схема работает также хорошо. Но с докером все по-другому.

Рабочий процесс разработки, который некоторые люди используют с Docker, выглядит следующим образом:

  • Запускать кучу сервисов с помощью команды docker-compose, кроме монолита Rails (тот же шаг, что и в моем рабочем процессе разработки выше).

  • Каждый раз, когда вы вносите изменения в свое приложение (например, файл JavaScript), вам необходимо перестраивать контейнер, потому что вы вносите изменения в свою локальную файловую систему, а не внутри контейнера Docker. Итак, вы 1) остановитесь 2) соберите 3) снова запустите контейнер Docker.

Другими словами, при использовании подхода только с Docker у нас есть следующие минусы:

  • Нет обновления webpacker js / css
  • Перестройка контейнера, которая занимает время
  • Перезапуск приложения, который иногда занимает много времени, даже если приложение Rails с нулевым кодом запускается через ~ 3 секунды

Итак, мой вопрос: как лучше всего использовать Docker-только подход? Как вы можете использовать преимущества Docker при использовании WebPacker с Rails и избежать обновления страницы и перезапуска приложения?

...