Capistrano部署Ubuntu服务器Rails 6应用时预编译阶段卡顿求助
排查与解决Capistrano资产预编译卡顿问题
1. 调整Capistrano的SSH输出缓冲设置
Capistrano通过SSH执行命令时,默认的输出缓冲可能导致进程挂起,尤其是资产预编译这类输出量大的任务。
- 在
deploy.rb或对应环境配置文件中开启PTY(伪终端),强制禁用输出缓冲:
或者针对资产预编译任务单独配置:set :pty, true
原理:开启PTY会让远程命令识别为交互式终端环境,避免因输出缓冲溢出导致进程阻塞。namespace :deploy do namespace :assets do task :precompile do on roles(fetch(:assets_roles)) do within release_path do with rails_env: fetch(:rails_env) do execute :bundle, :exec, :rake, "assets:precompile", pty: true end end end end end end
2. 排查资产预编译后续环节的问题
从卡顿日志看,进程停留在NPM构建完成阶段,大概率是Capistrano后续的资产清理/同步任务出问题。
- 临时禁用资产清理任务,测试部署是否恢复:
在deploy.rb中添加:
如果部署正常,再逐步排查Rake::Task["deploy:assets:clean"].clear_actionsassets:clean或assets:backup_manifest等任务的权限冲突、文件锁问题。
3. 优化SSH连接的超时与保活设置
从netstat结果看,卡顿存在额外SSH连接,可能是会话超时或服务器连接限制导致进程挂起。
- 调整服务器端
/etc/ssh/sshd_config配置:
重启sshd服务:ClientAliveInterval 60 ClientAliveCountMax 10 TCPKeepAlive yessudo systemctl restart sshd - 同时在本地
config/deploy.rb中设置SSH保活:set :ssh_options, { keepalive: true, keepalive_interval: 60, timeout: 300 }
4. 对比Capistrano与手动执行的环境差异
手动执行正常但Capistrano卡顿,大概率是环境变量不一致导致的。
- 在Capistrano的资产预编译任务中输出完整环境变量,和手动执行的结果对比:
修改任务添加环境输出:
重点对比namespace :deploy do namespace :assets do task :precompile do on roles(fetch(:assets_roles)) do within release_path do execute :printenv with rails_env: fetch(:rails_env) do execute :bundle, :exec, :rake, "assets:precompile" end end end end end endPATH、RBENV_VERSION、NODE_ENV、RAILS_ENV等变量,确保Capistrano执行时的环境和手动操作一致。
5. 检查服务器资源限制
Rails 6的Webpacker编译需要较多内存,服务器资源不足可能导致进程挂起。
- 部署时在另一个SSH会话中用
htop或top监控内存、CPU占用:
如果出现内存耗尽(OOM),可以:- 临时启用swap空间:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile - 调整Webpacker配置,关闭source map、拆分编译chunk以降低资源占用
- 升级服务器内存
- 临时启用swap空间:
6. 更新Capistrano及相关依赖版本
老旧的Capistrano插件可能和Rails 6、Webpacker存在兼容性问题。
- 更新Gemfile中的Capistrano相关依赖:
执行gem 'capistrano', '~> 3.17' gem 'capistrano-rails', '~> 1.6' gem 'capistrano-rbenv', '~> 2.2'bundle update capistrano capistrano-rails capistrano-rbenv后重新测试部署。
内容的提问来源于stack exchange,提问作者Syl
相关产品推荐
相关产品推荐

