I'm trying to upgrade my webpacker gem from ver 1 to 3.5. After changing configuration for newest syntax and libraries, the webpack-dev-server compiled successfully but when I tried to access my page I saw this error in my Rails server log:
2018-05-03 17:24:32 +0800: Rack app error handling request { GET /packs/index-c27d019630a75ad235b0.js }
#<NoMethodError: undefined method `closed?' for nil:NilClass>
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/2.4.0/net/http.rb:1484:in `begin_transport'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/net_http_hacked.rb:50:in `begin_request_hacked'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:60:in `response'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:29:in `headers'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:120:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/webpacker-3.5.2/lib/webpacker/dev_server_proxy.rb:20:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:57:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.0.2/lib/rails/engine.rb:522:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/configuration.rb:225:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:624:in `handle_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:438:in `process_client'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:302:in `block in run'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
2018-05-03 17:24:32 +0800: Rack app error handling request { GET /packs/index-a2683abf87f2554ec4f7d60d17218870.css }
#<NoMethodError: undefined method `closed?' for nil:NilClass>
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/2.4.0/net/http.rb:1484:in `begin_transport'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/net_http_hacked.rb:50:in `begin_request_hacked'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:60:in `response'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:29:in `headers'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:120:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/webpacker-3.5.2/lib/webpacker/dev_server_proxy.rb:20:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:57:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.0.2/lib/rails/engine.rb:522:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/configuration.rb:225:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:624:in `handle_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:438:in `process_client'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:302:in `block in run'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
2018-05-03 17:24:33 +0800: Rack app error handling request { GET /packs/index-c27d019630a75ad235b0.js }
#<NoMethodError: undefined method `closed?' for nil:NilClass>
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/2.4.0/net/http.rb:1484:in `begin_transport'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/net_http_hacked.rb:50:in `begin_request_hacked'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:60:in `response'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:29:in `headers'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:120:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/webpacker-3.5.2/lib/webpacker/dev_server_proxy.rb:20:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:57:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.0.2/lib/rails/engine.rb:522:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/configuration.rb:225:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:624:in `handle_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:438:in `process_client'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:302:in `block in run'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
2018-05-03 17:24:33 +0800: Rack app error handling request { GET /packs/index-a2683abf87f2554ec4f7d60d17218870.css }
#<NoMethodError: undefined method `closed?' for nil:NilClass>
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/2.4.0/net/http.rb:1484:in `begin_transport'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/net_http_hacked.rb:50:in `begin_request_hacked'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:60:in `response'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/http_streaming_response.rb:29:in `headers'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:120:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/webpacker-3.5.2/lib/webpacker/dev_server_proxy.rb:20:in `perform_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/rack-proxy-0.6.4/lib/rack/proxy.rb:57:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.0.2/lib/rails/engine.rb:522:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/configuration.rb:225:in `call'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:624:in `handle_request'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:438:in `process_client'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/server.rb:302:in `block in run'
/Users/waiyanyoon/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/puma-3.11.3/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
^C- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2018-05-03 17:30:55 +0800 ===
- Goodbye!
Exiting
^C
I saw this issue being reported once in https://github.com/rails/webpacker/issues/822 but unfortunately webmock gem is not being used in this codebase. What are the other possibilities of this error? fyi rack-proxy gem is newly introduced since I upgraded to webpacker 3.5.
These are my stack versions:
Rails ver: 5.0.2
Ruby ver.: ruby 2.4.2p198
Any help is appreciated, thanks in advance.
My case is a bit complicated, but with a simple fix.
I am using webpacker 3.2.1 and try to upgrade to 3.5.3. Web app works well. However if a web app is running (with webpack dev server on) capybara powered tests are failing with the same exception (NoMethodError: undefined method closed?' for nil:NilClass). (Non parallel) tests are green if a web app isn't running (webpack dev server is off).
I found out there is a problem with this line which returns true (introduced in 3.5.0). After that I was able to figure out dev_server: settings under default: settings in my config/webpacker.yml caused this problem. I believe a similar issue was fixed in https://github.com/rails/webpacker/commit/1066339ab9dbf8311529106cdb57babeb0faea02. So moving dev_server: settings under development: settings in my config/webpacker.yml solved this problem.
Hope this helps.
@yoonwaiyan Did you ever get to the bottom of this problem? I'm seeing a nearly identical error message after installing Webpack and running a Rails (4.2) server. Thanks in advance.
@christhesoul the upgrade progress was in stale for a very long while until I saw #1752 just now. I patched dev_server_proxy.rb in my config/initializers folder as shown in the PR and it worked! I haven't deploy this though you can try adding this code to the file (e.g config/initializers/webpacker.rb):
require "rack/proxy"
class Webpacker::DevServerProxy < Rack::Proxy
def perform_request(env)
if env["PATH_INFO"].start_with?("/#{public_output_uri_path}") && Webpacker.dev_server.running?
scheme = "http#{Webpacker.dev_server.https? ? 's' : ''}"
uri = "#{scheme}://#{Webpacker.dev_server.host_with_port}#{env["PATH_INFO"]}"
request = Net::HTTP::Get.new(uri)
response = Net::HTTP.start(Webpacker.dev_server.host, Webpacker.dev_server.port) do |http|
http.request(request)
end
headers = {}
response.each_header do |k, v|
headers[k] = v unless k == "transfer-encoding" || (k == "content-length" && Webpacker.dev_server.https?)
end
[response.code.to_i, headers, [response.read_body]]
else
@app.call(env)
end
end
private
def public_output_uri_path
Webpacker.config.public_output_path.relative_path_from(Webpacker.config.public_path)
end
end
Is this issue still relevant ?
Can it be closed maybe ?
I was hoping to get a response from the contributing team as it seems to be related to several issues being circulating here (see https://github.com/rails/webpacker/issues/1752 ) which would be helpful for everyone who's been facing this issue. The monkey patch worked for me but the idea of monkey patching is not a good practice in Ruby in general. I'd still hope someone could take a look at this issue, but if rack-proxy is removed or the part above is fixed then I'm fine to have this issue closed.
Most helpful comment
@christhesoul the upgrade progress was in stale for a very long while until I saw #1752 just now. I patched dev_server_proxy.rb in my config/initializers folder as shown in the PR and it worked! I haven't deploy this though you can try adding this code to the file (e.g config/initializers/webpacker.rb):