使用Webpacker的Rails应用通过Capistrano部署时如何跳过backup_manifest任务?
解决Capistrano部署时跳过backup_manifest任务的问题
我之前也碰到过一模一样的情况——用Webpacker完全接管资源构建,删掉app/assets后,Capistrano那个默认的备份manifest任务直接搞砸了部署。下面是两种简单有效的解决方法:
方法一:清空任务动作
在你的config/deploy.rb或者自定义的Capistrano任务文件(比如lib/capistrano/tasks/custom.rake)里添加这段代码:
# 先检查任务是否存在,避免无意义报错 if Rake::Task.task_defined?("deploy:assets:backup_manifest") # 清空该任务的所有执行动作,相当于直接跳过它 Rake::Task["deploy:assets:backup_manifest"].clear_actions end
这段代码会先确认目标任务存在,然后清空它的所有逻辑,Capistrano运行到这一步时就会直接跳过,不会再去寻找不存在的Sprockets manifest文件。
方法二:重定义为空任务
如果你更喜欢直观覆盖原任务,可以直接重新定义一个空的backup_manifest任务:
namespace :deploy do namespace :assets do task :backup_manifest do # 什么都不做,直接跳过该步骤 end end end
这样Capistrano执行时会优先使用你定义的这个空任务,完全替代原来的备份逻辑。
问题根源说明
Capistrano的Rails插件默认包含这个备份manifest的任务,它原本是给用Sprockets构建资源的项目准备的。当你删掉app/assets且不启用Sprockets时,public/assets/.sprockets-manifest*.json文件根本不存在,任务找不到文件就会抛出错误导致部署失败。而你用Webpacker构建资源,完全不需要这个备份步骤,直接跳过就好。
另外别忘了确认你的Webpacker Capistrano任务已经正确配置,确保部署时会自动编译你的CSS、JS和图片资源哦。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

