【问题标题】:set server options inside rackup file在 rackup 文件中设置服务器选项
【发布时间】:2017-01-08 16:18:35
【问题描述】:

我正在尝试设置服务器选项 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 中搜索了我能想到的尽可能多的字词,但没有返回完全正确的字词。

【问题讨论】:

    标签: ruby server config rack puma


    【解决方案1】:

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

    我要在这里冒个险,假设您的 App 是 Sinatra 应用程序或类似的东西。尝试在 Sinatra configure {} 块中设置这些选项的主要问题是,当 rackup 运行类并执行这些语句时,设置端口和线程池大小之类的东西已经太晚了。就缺少的run 方法而言,我认为您只需要 config.ru 中的run App。不知道你要去那里。

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

    #\ -s Puma
    

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

    #\ -s Puma -p 3000
    

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

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

    这(大部分)记录在 Puma 的自述文件 herehere 中。

    另一种选择是完全跳过 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 $0 == app_file
    end
    

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

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

    【讨论】:

    • 虽然两者都是正确的,但这是更广泛的答案。
    【解决方案2】:

    您可以在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)。

    【讨论】:

    • 你打败了我!我花了太长时间来写我的。 :-)
    • 选项序列不必是 config.ru 的第一行(例如,它可以在你的 require 语句甚至 Builder#use 之后),但是,它必须在 Builder#run 之前。尽管如此,最好将它像 shebang 一样放在文件的顶部。 注意,只解析找到的第一个选项序列。有关详细信息,请参阅 lib/rack/builder.rb 中的 Builder.parse_file。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 2019-03-30
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多