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
相关产品推荐
相关产品推荐

