在 rackup 文件中设置服务器选项

set server options inside rackup file

我正在尝试设置服务器选项 I.E.端口、主机等,但我无法从 config.ru 文件中找到有关如何执行此操作的任何信息。

我试过将配置选项放入散列中,然后执行:

configure { set :server, config[:server][:handler].to_sym }
Rack::Handler.default.run(App, config[:server])

也尝试过:

Rack::Handler::pick(['puma']).run App, config[:server]

甚至:

configure { set :server, config[:server].delete(:handler).to_sym }

这样处理程序就不会在服务器配置哈希中并且仍然...

没有骰子。

配置哈希为:

{
  :handler => "puma", 
  :host    => "127.0.0.1", 
  :port    => 3000, 
  :threads => "0:16", 
  :verbose => true
}

但是哈希配置被忽略了,我将端口设置为 3000 但应用程序默认加载 8080

它还有关于不存在 run 命令的错误(很明显,我没有使用它)。

所以解决这个问题也很好。

我确定有一个正确的方法可以做到这一点,但为什么很难找到它的文档?我在 google 中搜索了尽可能多的搜索词,但没有任何结果是完全正确的。

您可以在 config.ru 中以 #\ 开头的行指定选项(它必须是第一个这样的行)。你指定它们就好像你指定命令行选项到 rackup:

#\ -s puma -o 127.0.0.1 -p 3000 -O Threads=0:16 -O Verbose

# require everything and set up middleware etc.

run MyApp

docs for this are hidden away on the wiki.

检查 rackup -s puma -h 您可以使用的选项。 -O 将选项传递给您正在使用的服务器(Puma 似乎接受 ThreadsVerbose)。

它没有很好的记录,因为大多数人不会做你想做的事情。 :-) 人们通常将他们的 Puma 配置存储在 config/puma.rb 中或在命令行上传递它,例如在配置文件中。

我要冒险,假设您的 App 是 Sinatra 应用程序或类似应用程序。尝试在 Sinatra configure {} 块中设置这些选项的主要问题是,当 rackup 是 运行ning class 并执行这些语句时,设置诸如端口和线程池大小。至于缺少的 run 方法,我认为您只需要 config.ru 中的 run App。不确定你要去那里干什么。

您可以通过在文件顶部添加以下内容来告诉 rackup 使用 Puma:

#\ -s Puma

如果你想设置端口或任何其他 rackup 选项,你可以这样做:

#\ -s Puma -p 3000

或者,对于特定于 Puma 的选项:

#\ -s Puma -p 3000 -O Threads=0:16 -O Verbose=true

这(大部分)记录在 Puma 的自述文件中 here, and here

另一种选择是完全跳过 rackup 和 config.ru,将所有内容构建到您的 Sinatra 应用程序中:

require 'sinatra/base'
require 'puma'

class App < Sinatra::Application
  configure do
    set :server, :puma
    set :port, 3000
    set :server_settings, :Threads => '0:16', :Verbose => true
  end

  run! if [=13=] == app_file
end

然后您可以像任何普通 Ruby 脚本一样 运行 您的应用程序,例如ruby app.rb

归根结底,我强烈建议您探索创建 Puma 配置文件并改用它。它只是更简单、更清晰、更易于理解。如果您需要从环境或其他方法或过程的结果中提取 Puma 设置,您可以在其中进行。祝你好运。