Rails 6生产环境wicked_pdf下载失败问题求助
Rails 6 中 wicked_pdf 生产环境异常解决指南
一、解决 ActionController::UnknownFormat 错误
- 确保控制器
show方法完整处理pdf格式请求,示例代码:def show @target_model = TargetModel.find(params[:id]) respond_to do |format| format.html format.pdf do render pdf: "document_#{@target_model.id}", template: 'target_models/show.pdf.erb', disposition: 'attachment' end end end - 前端请求必须明确指定pdf格式,避免路由匹配时格式识别失败,示例ERB代码:
<%= link_to '下载PDF', target_model_path(@target_model, format: :pdf) %> - 检查路由配置,确保
resources :target_models未限制仅接受html格式,默认resources路由支持多格式请求。
二、解决 wkhtmltopdf 路径错误
- 先确认生产服务器上wkhtmltopdf的实际安装路径,执行终端命令:
which wkhtmltopdf - 用包管理器重新安装wkhtmltopdf(避免手动下载版本的依赖缺失问题):
- Ubuntu/Debian系统:
sudo apt-get update && sudo apt-get install wkhtmltopdf - CentOS/RHEL系统:
sudo yum install wkhtmltopdf
- Ubuntu/Debian系统:
- 修正
config/initializers/wicked_pdf.rb中的exe_path为实际查到的路径,示例:WickedPdf.config = { exe_path: '/usr/bin/wkhtmltopdf' # 替换为which命令查到的真实路径 } - 安装wkhtmltopdf依赖库(避免运行时缺失核心组件):
- Ubuntu/Debian系统:
sudo apt-get install libxrender1 libfontconfig1 libxext6 - CentOS/RHEL系统:
sudo yum install libXrender libXext fontconfig
- Ubuntu/Debian系统:
额外排查点
- 查看生产环境日志
log/production.log,获取更详细的错误细节,比如是否存在模板找不到、文件权限不足等问题。 - PDF模板中替换样式/脚本标签为wicked_pdf专用标签,确保资源正常加载:
<%= wicked_pdf_stylesheet_link_tag 'application' %> <%= wicked_pdf_javascript_include_tag 'application' %> - 确认服务器运行用户(如puma/nginx用户)拥有wkhtmltopdf的执行权限,以及模板、资源文件的读取权限。
内容的提问来源于stack exchange,提问作者Nur_Alam39
相关产品推荐
相关产品推荐

