Rails
docker
webpacker

Dockerでwebpacker 3.0 が動かない時にやったこと

More than 1 year has passed since last update.

概要

  • webpacker3.0とともにrailsの環境をdockerに構築したところ、webpacker_dev_serverに接続できないエラーが発生した。
  • 解決方法は、webpacker-dev-serverに接続できるポート(0.0.0.0)を指定するだけ。

環境

これこのサイトをもとにしてrailsの開発環境をdockerで構築。主な違いはwebpackerのversionが3.0である点。

gem 'webpacker', '~> 3.0' #  '~> 2.0'ではない

エラー内容

構築したdockerイメージを起動させ、locahost:3000にアクセスしたところ下記のエラーがでた。

web_1  | Processing by Rails::WelcomeController#index as HTML
web_1  |   Rendering /usr/local/bundle/gems/railties-5.1.3/lib/rails/templates/rails/welcome/index.html.erb
web_1  |   Rendered /usr/local/bundle/gems/railties-5.1.3/lib/rails/templates/rails/welcome/index.html.erb (2.6ms)
web_1  | Completed 200 OK in 7ms (Views: 5.4ms)

web_1  | 2017-09-06 12:45:53 +0000: Rack app error handling request { GET / }
web_1  | #<Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for [::1]:3035>
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:1198:in `__connect_nonblock'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:1198:in `connect_nonblock'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:56:in `connect_internal'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:137:in `connect'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:627:in `block in tcp'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:227:in `each'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:227:in `foreach'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:617:in `tcp'
web_1  | /usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server.rb:9:in `running?'
web_1  | /usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server_proxy.rb:7:in `rewrite_response'
web_1  | /usr/local/bundle/gems/rack-proxy-0.6.2/lib/rack/proxy.rb:57:in `call'
web_1  | /usr/local/bundle/gems/railties-5.1.3/lib/rails/engine.rb:522:in `call'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/configuration.rb:225:in `call'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/server.rb:605:in `handle_request'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/server.rb:437:in `process_client'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/server.rb:301:in `block in run'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
web_1  | 2017-09-06 12:45:54 +0000: Rack app error handling request { GET /favicon.ico }
web_1  | #<Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for [::1]:3035>
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:1198:in `__connect_nonblock'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:1198:in `connect_nonblock'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:56:in `connect_internal'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:137:in `connect'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:627:in `block in tcp'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:227:in `each'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:227:in `foreach'
web_1  | /usr/local/lib/ruby/2.4.0/socket.rb:617:in `tcp'
web_1  | /usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server.rb:9:in `running?'
web_1  | /usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server_proxy.rb:7:in `rewrite_response'
web_1  | /usr/local/bundle/gems/rack-proxy-0.6.2/lib/rack/proxy.rb:57:in `call'
web_1  | /usr/local/bundle/gems/railties-5.1.3/lib/rails/engine.rb:522:in `call'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/configuration.rb:225:in `call'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/server.rb:605:in `handle_request'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/server.rb:437:in `process_client'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/server.rb:301:in `block in run'
web_1  | /usr/local/bundle/gems/puma-3.10.0/lib/puma/thread_pool.rb:120:in `block in spawn_thread'

詳しく見ると

普通のhtmlのレンダリングは成功している。

web_1  |   Rendered /usr/local/bundle/gems/railties-5.1.3/lib/rails/templates/rails/welcome/index.html.erb (2.6ms)
web_1  | Completed 200 OK in 7ms (Views: 5.4ms)

なんか、webpackerのdev_serverが怪しい

web_1  | /usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server.rb:9:in `running?'
web_1  | /usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server_proxy.rb:7:in `rewrite_response'

解決方法

原因

https://github.com/rails/webpacker/blob/master/README.md#development の記述を読むと、ポートが問題であることが推測された。

そのため、下記の様にlocalhost -> 0.0.0.0に修正することで解決する事ができた。

config/webpacker.yml
 dev_server:
    host: 0.0.0.0
    port: 3035
    hmr: false
    https: false