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

时间:2016-08-31 23:09:06

标签: ruby server config rack puma

我正在尝试设置服务器选项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 }

这样处理程序将不在服务器配置哈希中,仍然......

没有骰子。

config hash是:

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

但是哈希配置会被忽略,我将端口设置为3000,但默认情况下应用加载8080

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

所以解决这个问题也很不错。

我确信有一个正确的方法可以做到这一点,但为什么它很难找到记录?我已经在谷歌中完成了尽可能多的搜索术语,但是没有任何完全正确的回复。

2 个答案:

答案 0 :(得分:4)

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

我在这里走出困境并假设你的App是一个Sinatra应用程序或类似的东西。尝试在Sinatra configure {}块中设置这些选项的主要问题是,当rackup运行类并执行这些语句时,设置端口和线程池大小已经太晚了。至于缺少的run方法,我认为你只想在config.ru中run App。不确定你要去那里。

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

#\ -s Puma

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

#\ -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设置,您可以在那里执行此操作。祝你好运。

答案 1 :(得分:3)

您可以在#\中的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)。