英文:
Cannot start local server with Rails via WSL
问题
我尝试更新我的Rails应用程序,我认为问题可能出现在这里,因为我无法启动服务器。我已经尝试切换Ruby版本和降级Rails,但在某个地方卡住了,一直收到相同的错误。
我相信问题出在这里:日志的最后一行显示了与Puma有关的问题。
在这个Gist中,你可以找到我的Gemfile和Gemfile.lock
rails s
=> 启动Puma
=> Rails 6.0.2.1应用程序正在开发中启动
=> 运行 `rails server --help` 以获取更多启动选项
Puma以单模式启动...
* 版本4.3.1(ruby 2.6.3-p62),代号:神秘的旅行者
* 最小线程数:5,最大线程数:5
* 环境:开发
退出
回溯(最近的调用最后):
31: 来自bin/rails:4:in `<main>'
30: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require'
29: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency'
28: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `block in require'
27: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
26: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
25: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
24: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
23: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
22: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands.rb:18:in `<main>'
21: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/command.rb:46:in `invoke'
20: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/command/base.rb:69:in `perform'
19: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch'
18: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command'
17: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/thor-0.20.3/lib/thor/command.rb:27:in `run'
16: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:138:in `perform'
15: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:138:in `tap'
14: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:147:in `block in perform'
13: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:39:in `start'
12: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/rack-2.0.8/lib/rack/server.rb:297:in `start'
11: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/rack/handler/puma.rb:73:in `run'
10: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/launcher.rb:172:in `run'
9: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/single.rb:98:in `run'
8: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/runner.rb:161:in `load_and_bind'
7: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:90:in `parse'
6: 从/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:90:
<details>
<summary>英文:</summary>
I tried updating my Rails app and I believe here is the problem somewhere since I am not able to start the server. I already tried to switch Ruby-Versions and downgrade Rails but somewhere I got stuck and keep getting the same Error.
> .rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:233:in `setsockopt': Invalid argument - setsockopt(2) (Errno::EINVAL)
I believe here comes the problem: The very last line of the log shows issues with Puma.
In [this Gist you can find my Gemfile and Gemfile.lock][1]
```ruby
rails s
=> Booting Puma
=> Rails 6.0.2.1 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.1 (ruby 2.6.3-p62), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
Exiting
Traceback (most recent call last):
31: from bin/rails:4:in `<main>'
30: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require'
29: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency'
28: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `block in require'
27: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
26: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
25: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
24: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
23: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
22: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands.rb:18:in `<main>'
21: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/command.rb:46:in `invoke'
20: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/command/base.rb:69:in `perform'
19: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch'
18: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command'
17: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/thor-0.20.3/lib/thor/command.rb:27:in `run'
16: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:138:in `perform'
15: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:138:in `tap'
14: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:147:in `block in perform'
13: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/railties-6.0.2.1/lib/rails/commands/server/server_command.rb:39:in `start'
12: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/rack-2.0.8/lib/rack/server.rb:297:in `start'
11: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/rack/handler/puma.rb:73:in `run'
10: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/launcher.rb:172:in `run'
9: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/single.rb:98:in `run'
8: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/runner.rb:161:in `load_and_bind'
7: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:90:in `parse'
6: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:90:in `each'
5: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:106:in `block in parse'
4: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:222:in `add_tcp_listener'
3: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:222:in `each'
2: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:223:in `block in add_tcp_listener'
1: from /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:233:in `add_tcp_listener'
/home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb:233:in `setsockopt': Invalid argument - setsockopt(2) (Errno::EINVAL)
Thanks for any help in advance! Denny
答案1
得分: 1
找到了临时解决方案。
示例如下:
在文件 /home/%username%/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/binder.rb
或者在您的情况下是 /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb
,
大约在第233行:
#
def add_tcp_listener(host, port, optimize_for_latency=true, backlog=1024)
if host == "localhost"
loopback_addresses.each do |addr|
add_tcp_listener addr, port, optimize_for_latency, backlog
end
return
end
host = host[1..-2] if host and host[0..0] == '['
# monkey patch starts here
host = '127.0.0.1'
port = 3000
# monkey patch ends here
s = TCPServer.new(host, port)
# if optimize_for_latency
s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
# end
# s.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
s.listen backlog
@connected_port = s.addr[1]
@ios << s
s
end
现在一切正常,但我们仍然需要正确解决此问题。
这是一个常见的WSL问题:https://github.com/microsoft/WSL/issues/1419
英文:
found the temporal solution.
Example is below:
in file /home/%username%/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/binder.rb
or in your case /home/chocolope/.rvm/gems/ruby-2.6.3/gems/puma-4.3.1/lib/puma/binder.rb
around row 233:
#
def add_tcp_listener(host, port, optimize_for_latency=true, backlog=1024)
if host == "localhost"
loopback_addresses.each do |addr|
add_tcp_listener addr, port, optimize_for_latency, backlog
end
return
end
host = host[1..-2] if host and host[0..0] == '['
# monkey patch starts here
host = '127.0.0.1'
port = 3000
# monkey patch ends here
s = TCPServer.new(host, port)
# if optimize_for_latency
s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
# end
# s.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
s.listen backlog
@connected_port = s.addr[1]
@ios << s
s
end
now everything works, but we still need the right way to fix this issue
this is a common WSL problem: https://github.com/microsoft/WSL/issues/1419
答案2
得分: 0
我遇到了类似的问题,使用以下配置:
WSL: 1
,Ruby: 2.5.0
,Rails: 4.2.1
,以及Puma: 3.8.0
当我发送GET请求时,Rails服务器正常工作,但我一直收到以下错误:
Read error: #<Errno::ENOPROTOOPT: Protocol not available - getsockopt(2)>
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:124:in `getsockopt'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:124:in `closed_socket?'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:563:in `handle_request'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:425:in `process_client'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:289:in `block in run'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
我为了解决这个问题付出了很多努力,甚至尝试了上面的解决方案,但都没有成功。
最后,我找到了一个简单的解决方法,只需要将Puma从3.8升级到3.12+,然后问题就完美解决了。
英文:
I was having a similar issue with
WSL: 1
, Ruby: 2.5.0
, Rails: 4.2.1
, and Puma: 3.8.0
my rails s was working i was getting the follwoing error when ever i send a Get request:
Read error: #<Errno::ENOPROTOOPT: Protocol not available - getsockopt(2)>
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:124:in `getsockopt'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:124:in `closed_socket?'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:563:in `handle_request'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:425:in `process_client'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/server.rb:289:in `block in run'
/home/abr/.rvm/gems/ruby-2.5.0@helpy/gems/puma-3.8.1/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
I struggle a lot for fixing that issue even I try the above solution but that didn't work either.
at last, I found a simple solution that I need to update my Pum from 3.8 to 3.12+ and it works perfectly for me.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论