Ruby on rails 无法在nginx上启动rails应用程序,WSL下的passenger和https-端口正在使用

Ruby on rails 无法在nginx上启动rails应用程序,WSL下的passenger和https-端口正在使用,ruby-on-rails,ubuntu,nginx,passenger,windows-subsystem-for-linux,Ruby On Rails,Ubuntu,Nginx,Passenger,Windows Subsystem For Linux,我正在尝试在WSL和Ubuntu上设置我的开发环境(来自macOS) 堆栈如下所示: MySQL, Ruby on Rails, nginx, 乘客 rails服务器本身以及已经填充的mysql数据库运行良好。现在,当尝试打开连接时,会出现以下错误: 地址已在使用中-侦听(2)(错误号::EADDRINUSE) /usr/lib/ruby/vendor\u ruby/phusion\u passenger/request\u handler.rb:303:in'listen' /usr/lib

我正在尝试在WSL和Ubuntu上设置我的开发环境(来自macOS)

堆栈如下所示: MySQL, Ruby on Rails, nginx, 乘客

rails服务器本身以及已经填充的mysql数据库运行良好。现在,当尝试打开连接时,会出现以下错误:

地址已在使用中-侦听(2)(错误号::EADDRINUSE)
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/request\u handler.rb:303:in'listen'
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/request\u handler.rb:303:in`block in'create\u unix\u socket\u on\u filesystem'
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/utils.rb:65:in'block in retry\u at\u most'
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/utils.rb:63:in'times'
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/utils.rb:63:in'retry\u at\u most'
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/request\u handler.rb:299:in'create\u unix\u socket\u on\u filesystem'
/usr/lib/ruby/vendor\u ruby/phusion\u passenger/request\u handler.rb:101:in'initialize'
/usr/share/passenger/helper脚本/rack preload.rb:135:in'new'
/usr/share/passenger/helper scripts/rack preload.rb:135:in'govertiate_spawn_command'
/usr/share/passenger/helper脚本/rack-preload.rb:158:in`'
/usr/share/passenger/helper脚本/rack preload.rb:30:in`'
/usr/share/passenger/helper脚本/rack preload.rb:29:in`'

我已经尝试关闭所有可能占用端口(80和443)的Windows应用程序,并通过
netstat
进行检查,但仍然无法工作


有人知道什么可能会阻塞端口,或者可能是WSL/Ubuntu和Windows之间的通信中的问题吗?此外,还欢迎您提供深入挖掘/进一步调查的提示。

在WSL中运行时,这似乎是一个乘客问题。通过查看堆栈跟踪位置(request_handler.rb),我注意到有一种方法可以解决这个问题,即强制乘客不要使用unix套接字,而是使用TCP套接字。这对我在Apache中起了作用:

Apache-在您的配置中:

SetEnv _PASSENGER_FORCE_HTTP_SESSION true
nginx-在您的配置中(未经测试,但应工作相同):

乘客通过命令行:

_PASSENGER_FORCE_HTTP_SESSION=true passenger start ...
编辑:虽然这适用于基本的站点请求,但它似乎被ajax post请求卡住了,所以我仍然在寻找更好的解决方法


编辑2:上面有一些意想不到的副作用-我已经做了适当的修复和修改。同时,您可以编辑乘客gem文件,将此更改添加到本地设置。

如果您没有使用该端口的权限,则会出现类似错误。端口80和443保留供系统使用。您只能在
sudo
P.S.下使用它们。上nginx可能正在使用端口80,这将阻止乘客使用相同的端口。您应该将Rails应用程序设置为不同的端口(通常使用3000或9292),然后通过nginx将请求转发到您选择的端口。在云托管环境(即Heroku)上,端口被动态分配给环境的
端口
变量。
_PASSENGER_FORCE_HTTP_SESSION=true passenger start ...