Sinatra 未绑定到正确的端口

Dit*_*ash 1 port sinatra openshift

我使用 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
Run Code Online (Sandbox Code Playgroud)

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

Listening on localhost:9292, CTRL+C to stop
Run Code Online (Sandbox Code Playgroud)

错误:

no acceptor (port is in use or requires root privileges) (RuntimeError) 
Run Code Online (Sandbox Code Playgroud)

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

mat*_*att 5

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

\n\n

您可以使用-p--port选项来rackup设置端口。从命令行您可以执行以下操作:

\n\n
$ bundle exec rackup -p $OPENSHIFT_RUBY_PORT\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以在 的第一行指定命令行选项config.ru,但我不\xe2\x80\x99t 认为您可以在那里指定环境变量。

\n\n

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

\n