Rails生产环境如何配置webpacker?静态资源加载500错误怎么解决
排查解决步骤
- 确认静态资源编译的执行环境
你当前是Windows + Docker的测试环境,不要在Windows本地执行RAILS_ENV=production bundle exec rake assets:precompile,Windows的文件权限、路径分隔符与Docker内的Linux环境不兼容,会导致容器内的Rails、Nginx无法读取生成的资源文件返回500。你需要进入Docker的Rails容器内部执行资源编译命令,确保生成的文件权限、格式适配容器运行环境。 - 检查视图资源引用参数
你请求的静态资源路径后缀带?body=1,这是Rails开发模式下开启资源debug才会生成的参数,生产环境不会出现该参数。检查你的布局视图中javascript_include_tag、stylesheet_link_tag是否误加了debug: true配置,生产环境需要移除该参数,否则会请求precompile阶段不会生成的拆分单文件,导致资源访问异常。 - 验证资源文件存在性与权限
执行完编译后,进入容器检查public/assets、public/packs目录下是否存在请求路径中对应的带哈希后缀的资源文件,同时确认运行Rails、Nginx进程的用户对这两个目录及其下文件有可读权限。 - 检查Nginx配置
确认Nginx站点配置的root参数指向Rails项目的public目录,且添加如下配置优先由Nginx处理静态资源请求:
location ~ ^/(assets|packs)/ { expires max; add_header Cache-Control public; gzip_static on; }
如果Nginx找不到资源会直接返回404而非转发到Rails返回500,方便进一步定位问题。
- 查看Rails生产日志具体报错
你当前只提供了浏览器端的错误,需要查看log/production.log中的500错误详情,确认是资源找不到、权限不足还是其他配置问题导致的内部错误。
内容的提问来源于stack exchange,提问作者dev test
相关产品推荐
相关产品推荐

