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

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
      
  • 修正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
      

额外排查点

  • 查看生产环境日志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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:57:51