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

Docker部署Ruby on Rails生产环境PDF无法显示问题求助

问题排查与解决方案

针对你遇到的Docker生产环境下Active Storage无法渲染PDF的问题,从以下几个方向排查解决:

1. 修复视图变量错误

你的局部视图_attachment.html.erb中使用了@territory.file,但渲染该局部时传递的变量是territory: territory,这会导致生产环境中(全局@territory变量可能不存在)无法正确获取文件对象。修改局部视图代码:

<% if territory.file.previewable? %>
  <div class="container">
    <embed type="application/pdf" src="<%= rails_blob_path(territory.file, disposition: :inline) %>" width="100%" height="500px">
  </div>
<% end %>

2. 配置生产环境文件服务

Rails在生产环境默认不会直接处理静态文件和Active Storage磁盘文件请求,需做以下配置:

  • 在config/environments/production.rb中启用文件服务代理:
    # 让Rails代理存储文件请求,避免直接暴露存储目录
    config.active_storage.resolve_model_to_route = :rails_storage_proxy
    # 若未使用Nginx等反向代理,需启用公共文件服务
    config.public_file_server.enabled = true
    
  • 若使用Nginx反向代理,可配置Nginx直接指向storage目录以减轻Rails负载,示例配置片段:
    location /rails/active_storage/blobs/ {
      root /path/to/your/rails/app;
      try_files $uri @rails;
    }
    

3. 验证Docker容器内存储目录配置

  • 确保生产环境Docker容器正确挂载./storage目录,避免容器重启后文件丢失,docker-compose.yml示例:
    services:
      web:
        volumes:
          - ./storage:/app/storage
    
  • 确认容器内storage目录权限属于Rails运行用户(通常为rails用户),可在Dockerfile中添加:
    RUN mkdir -p storage && chown -R rails:rails storage
    

4. 安装PDF预览依赖

PDF预览需要poppler-utils工具支持,生产环境Docker镜像可能未预装,在Dockerfile中添加安装命令:

# Debian/Ubuntu系镜像
RUN apt-get update && apt-get install -y poppler-utils
# Alpine系镜像
RUN apk add --no-cache poppler-utils

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:54:37