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

Rails站点样式表不更新求助(DigitalOcean Dokku环境)

Rails 7 生产环境样式不更新问题排查与解决

关于main.source.scss的说明

你看到的main.source.scss是sassc-rails编译过程中生成的临时中间文件,本地开发时Rails会动态编译Sass,这个文件仅存在于内存或临时目录中,不会出现在代码库或public/assets里,属于正常现象。只要你的源码目录下存在app/assets/stylesheets/main.scss(或.sass)就没问题。


核心问题解决步骤

1. 停止用dokku run执行预编译(关键错误)

dokku run是在临时容器中执行命令,生成的静态资源不会被你的应用容器加载,等于白操作。正确做法是让资产预编译在应用构建阶段执行,这样生成的CSS会被打包进应用镜像,供应用容器使用:

  • 若使用Dokku的Rails buildpack,默认会自动执行assets:precompile;如果之前修改过构建配置,检查是否误禁用了该步骤。
  • 应急方案:本地预编译后提交public/assets到代码库(不推荐长期使用,会增加仓库体积)。

2. 确认资产预编译列表配置

在config/initializers/assets.rb中,显式将你的主样式表加入预编译列表(默认Rails仅预编译application.*系列资产):

Rails.application.config.assets.precompile += %w( main.scss )

3. 检查生产环境资产配置

打开config/environments/production.rb,确保以下配置正确:

config.assets.compile = false       # 生产环境禁用动态编译,仅使用预编译资产
config.assets.digest = true         # 开启文件名指纹,强制浏览器加载最新资源
config.public_file_server.enabled = true  # 确保静态文件能被Dokku的Nginx正确服务

4. 重新部署应用

完成上述配置后,重新推送代码触发Dokku构建:

git push dokku main

构建阶段会自动执行assets:precompile,生成带指纹的新CSS文件。

5. 验证资产是否生成

部署完成后,进入应用容器检查public/assets目录:

dokku enter pwf web
# 在容器内执行
ls public/assets | grep main

若看到类似main-xxxxxxxxxxxxxx.css的带指纹文件,说明预编译成功。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:22:20