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

生产环境下使用wicked_pdf生成PDF失败问题求助

解决生产环境Nginx-Passenger下WickedPDF找不到rake依赖的问题

核心原因

Passenger运行时未正确加载项目的Bundler依赖环境,导致调用wkhtmltopdf时无法找到rake gem;而rails s和rails c直接使用本地shell的Bundler环境,因此能正常运行。

解决步骤

1. 确保Passenger指向正确的Ruby和Bundler版本

  • 检查Nginx配置(通常在/etc/nginx/sites-available/你的项目配置文件),确认passenger_ruby指向项目使用的Ruby路径(比如rbenv的~/.rbenv/versions/2.7.6/bin/ruby,或rvm的对应路径),避免使用系统默认Ruby
  • 在server块中添加指定Bundler版本的指令:
    passenger_bundler_version 2.1.4;
    
  • 重启Nginx生效:sudo systemctl restart nginx

2. 重新安装项目依赖并验证

  • 进入项目根目录,执行部署模式安装依赖,确保所有gem安装到项目本地:
    bundle install --deployment
    
  • 验证rake是否存在:
    bundle show rake
    
    输出应显示rake-13.0.6的安装路径,确认依赖已正确安装

3. 配置WickedPDF使用Bundler环境调用

  • 在config/initializers/wicked_pdf.rb中添加配置,明确使用bundle exec调用wkhtmltopdf:
    WickedPdf.config = {
      exe_path: `bundle exec which wkhtmltopdf`.chomp
    }
    
    强制WickedPDF在项目的Bundler环境下执行命令,避免环境不一致

4. 明确Passenger的Gemfile路径

  • 在Nginx的server块中添加环境变量指定Gemfile位置:
    passenger_env_var BUNDLE_GEMFILE /path/to/your/project/Gemfile;
    passenger_app_env production;
    
    确保Passenger加载生产环境的依赖配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:22:48