Capistrano回滚Rails部署失败:资产清单文件/备份文件未找到
解决Capistrano回滚时资产清单文件缺失的问题
嘿,我之前维护Rails 3.2项目的时候也碰到过一模一样的Capistrano回滚问题,结合capistrano-rails 1.2.3的特性,给你几个实用的解决思路:
1. 先确认资产备份文件是否真的丢了
Capistrano-rails在部署时会自动备份资产清单文件,默认存在服务器的#{shared_path}/config/manifest.yml(旧版本可能叫assets_manifest.yml)。你先登到生产服务器上,跑个命令看看:
ls /path/to/your/shared/config/
要是这个文件确实没了,那大概率是上一次部署时资产编译步骤出了岔子,没生成或者没备份这个文件。
2. 手动补全资产清单文件
如果清单文件真的丢了,你可以手动生成然后放到指定位置:
- 要是本地环境和生产环境一致,就在本地编译资产:
RAILS_ENV=production bundle exec rake assets:precompile
然后把生成的public/assets/manifest.yml传到服务器的shared/config/目录下就行。
- 或者直接在服务器上操作:
cd /path/to/your/current && RAILS_ENV=production bundle exec rake assets:precompile
编译完后把public/assets/manifest.yml复制到shared/config/目录,这样Capistrano回滚时就能找到它了。
3. 临时跳过资产回滚(应急用)
要是你这次回滚不需要动资产,也可以临时改Capistrano配置跳过这一步:
在deploy.rb里加两行配置:
# 不指定资产角色,跳过所有资产相关操作 set :assets_roles, [] # 或者直接清空资产回滚的任务 Rake::Task["deploy:rollback:assets"].clear_actions
不过这只是应急办法,还是建议先搞定清单文件缺失的根本问题,不然下次部署回滚可能还会出问题。
4. 查之前的部署日志找根源
回滚失败多半是上一次部署时资产编译没正常完成,导致没生成清单文件。你可以翻之前的Capistrano部署日志,搜assets:precompile相关的输出,看看是不是有权限问题、依赖缺失之类的报错,把这些问题修复后再重新部署一次,之后回滚应该就能正常跑了。
内容的提问来源于stack exchange,提问作者map7
相关产品推荐
相关产品推荐

