Ruby on rails 运行水豚时如何配置puma?

Ruby on rails 运行水豚时如何配置puma?,ruby-on-rails,capybara,puma,Ruby On Rails,Capybara,Puma,我想在运行水豚测试时调整puma配置。更改.env、.env.test(我使用)或config/puma.rb中的设置无效 在哪里可以更改配置 Rails 5.1、poltergeist 1.15.0、capybara 2.14.0、puma 2.8.2通常,使用capybara,您可以在寄存器服务器块中配置服务器。Capybara提供的:puma服务器定义是 Capybara.register_server :puma do |app, port, host| require 'rack/

我想在运行水豚测试时调整puma配置。更改.env、.env.test(我使用)或config/puma.rb中的设置无效

在哪里可以更改配置


Rails 5.1、poltergeist 1.15.0、capybara 2.14.0、puma 2.8.2

通常,使用capybara,您可以在寄存器服务器块中配置服务器。Capybara提供的:puma服务器定义是

Capybara.register_server :puma do |app, port, host|
  require 'rack/handler/puma'
  Rack::Handler::Puma.run(app, Host: host, Port: port, Threads: "0:4")
end
如果您使用的是Rails5.1系统测试,那么它在上面添加了一层抽象,服务器配置在中完成 ActionDispatch::SystemTesting::服务器#寄存器,定义为

def register
  Capybara.register_server :rails_puma do |app, port, host|
    Rack::Handler::Puma.run(app, Port: port, Threads: "0:1")
  end
end
无论哪种方式,您都应该能够覆盖当前的服务器注册之一

Capybara.register_server :rails_puma do |app, port,host|
  Rack::Handler::Puma.run(app, ...custom settings...)
end
或者配置您自己的

Capybara.register_server :my_custom_puma do |app, port, host|
  Rack::Handler::Puma.run(app, ...custom settings...)
end

Capybara.server = :my_custom_puma

ApplicationSystemTestCase
中,您可以通过将
选项
传递到默认的
:puma
服务器进行配置,该服务器由Rails在
设置中使用

好吧,这对任何选项都有效,但我只使用了

  • Silent:true
    使puma启动输出静音
  • 线程:“1:1”
    将puma进程配置为仅使用一个线程
以下是我如何设置rails系统测试以在docker容器中运行:

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { url: "http://selenium:4444/wd/hub" }

  def setup
    Capybara.server_host = '0.0.0.0' # bind to all interfaces
    Capybara.server = :puma, { Silent: true, Threads: '1:1' }
    host! "http://#{IPSocket.getaddress(Socket.gethostname)}"
    super
  end
end
class ApplicationSystemTestCase
谢谢!我不太清楚“覆盖当前的一个服务器注册”是什么意思——您能展示一些示例代码并说明它放在哪个文件中吗?你的意思是要覆盖
ActionDispatch::SystemTesting::Server.register
?@JohnBachir只需将上面的代码重新注册:rails\u puma放在您配置测试的任何文件中-它应该覆盖为记录制作的注册rails,我唯一能让它工作的方法是重新定义自己的服务器(
:我的定制美洲狮
)并将其放在应用程序系统测试用例rb的底部。应用程序系统测试用例rb或测试助手rb中的任何其他位置都不起作用,试图重新定义
:rails\u puma
不起作用。@JohnBachir好的-你在puma配置中到底更改了什么?@epgine如果你只想让puma安静下来,而你正在使用current版本的Capybara,您应该能够只执行
Capybara.server=:puma,{Silent:true}
或set
ActionDispatch::SystemTesting::Server.silence\u puma=true
如果使用Rails系统测试。这是唯一成功解决puma挂起问题的注释。谢谢@erroricI我正在尝试通过SSL进行测试,此解决方案可以使用SSL侦听器设置puma,但测试正在尝试连接到主机w如果没有SSL,它们就不会运行。你知道解决这个问题的方法吗?