我正在尝试设置服务器选项 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 中搜索了尽可能多的搜索词,但没有任何结果是完全正确的。
最佳答案
它没有被很好地记录下来,因为大多数人不会做你想做的事情。 :-) 人们通常将他们的 Puma 配置存储在 config/puma.rb 中或者在命令行上传递它,例如在配置文件中。
我要冒昧地假设您的 App
是 Sinatra 应用程序或类似的应用程序。尝试在 Sinatra configure {}
block 中设置这些选项的主要问题是,当 rackup 运行类并执行这些语句时,设置端口和线程池等内容已经太晚了尺寸。至于缺少的 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 , 和 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 $0 == app_file
end
然后你就可以像任何普通的 Ruby 脚本一样运行你的应用程序,例如 ruby 应用.rb
。
归根结底,我强烈建议您探索创建 Puma 配置文件并改用它。它只是更简单、更清晰、更易于理解。如果您需要从环境或其他方法或过程的结果中提取 Puma 设置,您可以在其中进行。祝你好运。
关于ruby - 在 rackup 文件中设置服务器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260374/