3

我必须修补一些代码,但不知道具体如何。所以基本上,我有一个绑定到主机名和端口的机架服务器。我希望它绑定到 unix 套接字。问题是,我无法弄清楚我必须给出的确切选项。

Rack::Server.new(:app => @app, :port => 3000).start 

做预期的事情。我认为它会是这样的:

Rack::Server.new(:app => @app, :socket => "path/to/file").start

但这仍然绑定到默认端口。我怎样才能做到这一点?

4

3 回答 3

5

我发现如果您将文件名传递给:Host它绑定到 unix 套接字而不是 tcp 套接字的选项。

文件名需要看起来像这样:

/var/www/myapp/my_app.socket或者./my_app.socket

如果它看起来像这样的域名,这将不起作用:

my_app.socket

例如,这是一个在 Rack 1.2 中工作的 rackup 命令:

rackup -s thin -E production -o ./my_app.socket faye.ru

或者这就是您从 ruby​​ 执行此操作的方式:

require 'rack'
require 'thin'
Rack::Handler.get('thin').run(app, :Host => './my_app.socket')

# or this works also

require 'rack'
require 'thin'
Rack::Server.new(:app => app, :Host => './my_app.socket').start

注意:此处的大写 H:Host是必需的。

我希望这会有所帮助!

于 2014-05-23T05:20:00.270 回答
2

显然这是不可能的。机架兼容的服务器通常支持此功能,但 Rack::Server“接口”不使用它(至少截至 2013 年 10 月的最新版本)。为什么不呢,超出了我的范围。

于 2013-10-04T19:16:28.337 回答
-1

您是否尝试过 :Socket 或 :File ?请注意,使用 Rack 时,实际 Web 服务器(webrick、thin 等)的选项通常以大写字符开头。

于 2014-01-09T20:38:48.987 回答