Sinatra 未绑定到正确的端口

Sinatra not binding to right port

我正在使用 Openshift 和 Sinatra 来托管我的网站。但是它没有绑定到正确的端口。

set :port, ENV["OPENSHIFT_RUBY_PORT"]
set :port, ENV["OPENSHIFT_RUBY_IP"]
...
puts ENV["OPENSHIFT_RUBY_PORT"]
puts settings.port
puts ENV["OPENSHIFT_RUBY_IP"]
puts settings.bind

这returns正确的输出。但是当服务器真正启动时...

Listening on localhost:9292, CTRL+C to stop

错误:

no acceptor (port is in use or requires root privileges) (RuntimeError) 

如何让它绑定到正确的端口?

set :port, ... 设置 Sinatra 内置服务器的端口,但您使用的是 rackup,因此未使用此设置(9292 是 Rack 的默认端口)。

您可以使用 -p--port 选项到 rackup 来设置端口。从命令行你可以做:

$ bundle exec rackup -p $OPENSHIFT_RUBY_PORT

你也可以在config.ru的第一行指定命令行选项,但我认为你不能在那里指定环境变量。

如果您想避免在命令行上指定端口,您可能需要创建一个包装脚本来读取环境变量并调用 rackup.