Rails 6.0 - webpacker hmr in docker
Главное
- для webpacker создаем отдельный docker сервис, но используем один образ
- host - имя контейнера где работает webpacker, Rails будет работать (компилировать) с этим адресом
- публичный хост - localhost, при HMR будет опрашивать localhost:3035
- разрешить политику подключения
policy.connect_src
для HMR - указываем в настройках
hmr: true
иhot: true
Кофигурация Webpacker
# config/webpacker.yml
development:
<<: *default
host: webpacker
hmr: true
compile: true
dev_server:
https: false
# set same as docker-compose service name
host: webpacker
port: 3035
# for proxy packs
public: localhost:3035
hmr: true
host: true
inline: true
compress: true
disable_host_check: true
use_local_ip: false
quiet: false
headers:
'Access-Control-Allow-Origin': '*'
watch_options:
ignored: '**/node_modules/**'
Политики
# config/initializers/content_security_policy.rb
Rails.application.config.content_security_policy do |policy|
policy.connect_src :self, :https, "http://localhost:3035", "ws://localhost:3035" if Rails.env.development?
end
Дополнительный сервис в docker-compose
# docker-compose.yml
# only part
services:
app:
build: .
command: bundle exec rails s -b '0.0.0.0'
# shared image for two services
image: username/railsproject:6.0.0
ports:
- 3000:3000
volumes:
- .:/usr/src/app
env_file:
- .env
- .env.development
- .env.webpacker
...
webpacker:
image: username/railsproject:6.0.0
depends_on:
- app
env_file:
- .env.webpacker
command: ./bin/webpack-dev-server
volumes:
- .:/usr/src/app
ports:
- 3035:3035
...