使用worker启动Puma服务器时出错

had*_*dzy 10 ruby ruby-on-rails puma

我是Rails和Puma的新手,所以这个问题可能因为简单的解决方案而过于愚蠢,如果你认为我做错了什么也请指导我.

我正在尝试为工作人员启动Puma服务器.如果我将工人设置为0

puma -w0
Run Code Online (Sandbox Code Playgroud)

服务器启动完美,但如果我将worker设置为1或更多,则会出现以下错误:

E:\RoR_tryouts\ws_13.11.13\todo>puma -w3
[2120] *** SIGUSR2 not implemented, signal based restart unavailable!
[2120] *** SIGUSR1 not implemented, signal based restart unavailable!
[2120] Puma starting in cluster mode...
[2120] * Version 2.7.1, codename: Earl of Sandwich Partition
[2120] * Min threads: 0, max threads: 16
[2120] * Environment: development
[2120] * Process workers: 3
[2120] * Phased restart available
[2120] * Listening on tcp://0.0.0.0:9292

C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/lib/puma/cluster.rb:229:in `trap': unsupported signal SIGCHLD (ArgumentError)
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/lib/puma/cluster.rb:229:in `run'
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/lib/puma/cli.rb:442:in `run'
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/bin/puma:10:in `<top (required)>'
        from C:/Ruby/Ruby193/bin/puma:23:in `load'
        from C:/Ruby/Ruby193/bin/puma:23:in `<main>'
Run Code Online (Sandbox Code Playgroud)

产品规格:

  • Windows 7的
  • Ruby 1.9.3p448(2013-06-27)[i386-mingw32] MRI Rail 4.0.0 Puma
  • 版本2.7.1,代号:三明治分区伯爵

小智 18

是的,我有同样的问题,并在"工人"主题下的https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server找到了解决方案.如果您在Windows或者Juby中省略了config/puma.rb文件中的"worker Integer(ENV ['WEB_CONCURRENCY'] || 2)"行.它为我解决了它.阅读上面的链接了解更多信息.

  • 比删除它更好用它替换它:`workers Integer(ENV ['WEB_CONCURRENCY'] || 2)除非Gem.win_platform?` (7认同)

Hol*_*ust 8

引用Puma自述文件:

由于各种平台没有实现某些功能,因此在不同平台上使用Puma时会出现以下差异:

  • JRuby,Windows:服务器套接字在重启时不是无缝的,必须关闭并重新打开.这些平台无法将描述符传递给暴露给ruby的新进程
  • JRuby,Windows:由于缺少fork(2)而不支持集群模式
  • Windows:由于缺少fork(2)而不支持守护程序模式

正如它明确指出的那样,Windows不支持集群模式(即运行具有多个worker的单个puma实例)和守护进程模式(在启动后从shell分离).

您应该使用differt操作系统(例如Linux)或在单工作模式下使用Puma.您可以手动启动不同端口上的多个Puma实例,并在它们之间进行负载均衡,即使在Windows上也是如此.你只需要一个前端负载均衡器,它不像Puma内置的本机集群模式那样无缝.