Webpacker & Rails Asset Pipeline в Docker - View не указывает на обновленный ресурс JS - PullRequest
0 голосов
/ 23 мая 2019

Я запускаю приложение Rails в контейнере Docker, но борюсь со своей средой разработки, так как не могу надежно получить изменения javascript для распространения в мое приложение, работающее на localhost.

Описание шагов для выявления проблемы:

  • Если я обновлю представление, я вижу в консоли, что веб-упаковщик компилирует.
  • Создает новый актив в кэш-памяти в public / packs admin-7c69920b702f68258e99.js
  • Манифест.json отражает это обновление "admin.js": "/packs/admin-7c69920b702f68258e99.js"
  • Я могу несколько раз обновить представление, но на вкладке сети отображается, что старый ресурс называется admin-4cf5f7c7d6c5ad665fc6.js.

Я пробовал следующий процесс, но он не запускает обновление ресурсов даже при отключенном кеше.

  • Обновление представления в браузере для запуска компиляции веб-пакета
  • Перезапустите сервер Rails, выйдя из Docker и запустив docker-compose up
  • Обновить вид

Мне обычно приходится останавливать и запускать сервер Rails во второй раз, чтобы запустить обновление ресурсов. Это кажется слишком вуду-подобным для эффективной среды разработки.

Я хотел бы найти способ надежного обеспечения отображения последних ресурсов в моей среде разработки без необходимости вручную следить за именами файлов активов, чтобы подтвердить, что обновление произошло.

Есть ли хитрость в том, чтобы перезарядить ресурсы, которые я могу пропустить?

Я использую ruby: 2.3.7 и Rails 5.2.2.1

1 Ответ

0 голосов
/ 23 мая 2019

Мне удалось решить эту проблему, и теперь я перезагружаю мои ресурсы JavaScript.

Первая проблема, с которой я столкнулся, была самой простой, и она сразу же исправила проблему для членов команды, которые работали на своем локальном компьютере (т.е. не в контейнере Docker).

  • Файл конфигурации веб-упаковщика webpacker.yml имеет ряд значений по умолчанию с параметром cache_manifest, установленным в значение true. Это объясняет, почему браузер держался за старую инструкцию. Разрешается настройкой cache_manifest: false

Это не сразу решило проблему для приложения, работающего в Docker. Видимо, вам нужно настроить webpacker на запуск в своем собственном контейнере. Смотрите официальные инструкции веб-упаковщика здесь: https://github.com/rails/webpacker/blob/master/docs/docker.md

Я считаю следующие инструкции наиболее полезными: http://paulsturgess.co.uk/blog/2018/01/09/setup-webpacker-webpack-dev-server-with-docker-compose/

  • Итак, я добавил следующее к своему docker-compose.yml

    версия: '3' Сервисы: webpacker: построить: среда: - WEBPACKER_DEV_SERVER_PUBLIC = localhost: 3035 - WEBPACKER_DEV_SERVER_HOST = localhost команда: ./bin/webpack-dev-server --inline true объемы: -.: / myapp порты: - «3035: 3035»

  • Затем запустите docker-compose up --build

Это волшебным образом решает проблему перезагрузки.

...