【问题标题】:Error while starting Puma server with workers使用工作人员启动 Puma 服务器时出错
【发布时间】:2014-01-15 02:34:11
【问题描述】:

我是 Rails 和 Puma 的新手,所以如果使用简单的解决方案,这个问题可能太傻了,如果您认为我做错了什么,请指导我。

我正在尝试与工人一起为我的 Rails 启动 Puma 服务器。如果我用

将workers设置为0
puma -w0

服务器完美启动,但如果我将 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>'

规格:

  • Windows 7
  • Ruby 1.9.3p448 (2013-06-27) [i386-mingw32] MRI Rail 4.0.0 Puma
  • 版本 2.7.1,代号:Earl of Sandwich Partition

【问题讨论】:

    标签: ruby-on-rails ruby puma


    【解决方案1】:

    引用the Puma README:

    由于各个平台没有实现某些东西,所以在不同平台上使用Puma时会出现以下差异:

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

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

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

    【讨论】:

    • yosh,谢谢您的帮助...,还有其他可以提供并发的服务器吗..?
    • 如果这个答案回答了你的问题,请考虑to accept这个答案。
    • 这也不能通过更改操作系统来工作。它的意思是“集群模式在 Windows OR JRuby 上不起作用”。另请参阅此资源:github.com/puma/puma/issues/374
    • @loybert OP 不使用 jruby,而是使用 MRI 1.9.3。因此,他唯一的问题是 Windows。
    【解决方案2】:

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

    【讨论】:

    • 这行得通,它提供了问题的正确来源和解决方案。
    • 比删除它更好的是用这个代替它:workers Integer(ENV['WEB_CONCURRENCY'] || 2) unless Gem.win_platform?
    • 谢谢。我做了类似的事情,因为我只希望在生产环境中这样做。 if Rails.env == "production" workers Integer(ENV['WEB_CONCURRENCY'] || 2) end
    猜你喜欢
    • 2016-07-19
    • 2016-09-13
    • 2020-05-03
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    相关资源
    最近更新 更多