运行 守护进程时 Puma 不记录
Puma not logging when running daemon
当 运行 Puma 作为守护进程时(即使用 -d
标志),Puma 似乎不会登录到 stdout_redirect
.
指定的位置
有没有人以前见过这种行为,如果有,找到了一种解决方法来为 Puma 生成正确的日志文件(特别是 stdout_redirect
到位,特别是 Ruby Rails申请)?
stdout_redirect
不起作用的原因是,当您 运行 rails server -d
时,config/puma.rb
永远不会 运行。您可以通过更改端口号或什至在文件中引入语法错误来亲自演示这一点。
Puma 运行s 作为 Rack 服务器,因此由 Rack 中间件启动。 Rack code只是使用核心RubyProcess
class分离进程:
def daemonize_app
Process.daemon
end
不幸的是,Process.daemon
默认做两件事:
- 将当前工作目录更改为根目录 ('/')。
- 将 stdout 和 stderr 重定向到
/dev/null
。
因此,当 Puma 服务器初始化时,所有进程输出都被合并,并且由于 /config/puma.rb
不存在,puma 回退到其硬编码的默认设置。
如果您临时破解 rack
代码以覆盖 chdir 行为,您实际上可以演示您想要的行为:
def daemonize_app
Process.daemon(true)
end
如果 .daemon
的第一个参数是 true
它不会更改当前工作目录,因此 config/puma.rb
得到 运行.
缺少某种丑陋的 Rack 猴子补丁,一个(可能也是丑陋的)解决方法是跳过 -d
选项并在 config/puma.rb
中滚动你自己的。例如:
# ... rest of the puma config
return unless ENV['DAEMONIZE_PUMA'].present?
puts 'Running puma as a daemon...'
Process.daemon(true)
然后:
% export DAEMONIZE_PUMA=true
% rails server
=> Booting Puma
=> Rails 6.1.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Running puma as a daemon...
% tail log/puma.out
=== puma startup: 2021-07-17 10:03:37 +1200 ===
当 运行 Puma 作为守护进程时(即使用 -d
标志),Puma 似乎不会登录到 stdout_redirect
.
有没有人以前见过这种行为,如果有,找到了一种解决方法来为 Puma 生成正确的日志文件(特别是 stdout_redirect
到位,特别是 Ruby Rails申请)?
stdout_redirect
不起作用的原因是,当您 运行 rails server -d
时,config/puma.rb
永远不会 运行。您可以通过更改端口号或什至在文件中引入语法错误来亲自演示这一点。
Puma 运行s 作为 Rack 服务器,因此由 Rack 中间件启动。 Rack code只是使用核心RubyProcess
class分离进程:
def daemonize_app
Process.daemon
end
不幸的是,Process.daemon
默认做两件事:
- 将当前工作目录更改为根目录 ('/')。
- 将 stdout 和 stderr 重定向到
/dev/null
。
因此,当 Puma 服务器初始化时,所有进程输出都被合并,并且由于 /config/puma.rb
不存在,puma 回退到其硬编码的默认设置。
如果您临时破解 rack
代码以覆盖 chdir 行为,您实际上可以演示您想要的行为:
def daemonize_app
Process.daemon(true)
end
如果 .daemon
的第一个参数是 true
它不会更改当前工作目录,因此 config/puma.rb
得到 运行.
缺少某种丑陋的 Rack 猴子补丁,一个(可能也是丑陋的)解决方法是跳过 -d
选项并在 config/puma.rb
中滚动你自己的。例如:
# ... rest of the puma config
return unless ENV['DAEMONIZE_PUMA'].present?
puts 'Running puma as a daemon...'
Process.daemon(true)
然后:
% export DAEMONIZE_PUMA=true
% rails server
=> Booting Puma
=> Rails 6.1.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Running puma as a daemon...
% tail log/puma.out
=== puma startup: 2021-07-17 10:03:37 +1200 ===