You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止Phusion Passenger覆盖Rails日志并补全应用调用栈信息?

解决方案

该问题是因为Rails默认的回溯过滤逻辑会优先展示调用栈最顶层的帧,而Passenger作为Rack请求入口正好在栈顶,同时默认的消音规则没有过滤Passenger路径,导致应用内的调用帧被隐藏,可按以下步骤调整配置:

步骤1:调整Rails回溯消音配置

打开 config/initializers/backtrace_silencers.rb 文件,修改配置如下:

# 清除默认消音规则,避免误过滤应用内路径
Rails.backtrace_cleaner.remove_silencers!

# 将Passenger相关路径加入消音列表,日志中不显示这类栈帧
Rails.backtrace_cleaner.add_silencer { |line| line.include?("phusion_passenger") }

# 可选:将绝对路径替换为Rails根目录相对路径,日志更简洁
Rails.backtrace_cleaner.add_filter { |line| line.gsub(Rails.root.to_s, '.') }

步骤2:调整Active Record SQL日志配置

打开 config/environments/development.rb,添加以下配置:

# 开启SQL查询调用栈显示
config.active_record.verbose_query_logs = true
# 调整调用栈展示数量,默认值为1,改为3-5即可覆盖到应用内调用位置
config.active_record.backtrace_length = 5
# Rails 7+ 可额外开启查询标签,便于定位请求来源
# config.active_record.query_log_tags_enabled = true

注:如果使用Rails 6.1以下版本,backtrace_length 配置不可用,可安装同名的 verbose_query_logs gem实现相同效果。

步骤3:重启Passenger进程生效

修改完成后,无需重启Nginx,直接在Rails项目根目录执行以下命令即可重启Passenger进程加载新配置:

touch tmp/restart.txt

配置生效后,SQL日志的调用栈就会优先显示应用内的文件路径与行号,不再展示Passenger相关的底层栈帧。


内容的提问来源于stack exchange,提问作者Sumak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:06:02