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

Capistrano部署assets预编译失败:SSHKit::Command::Failed错误

问题

此前部署项目无异常,近期执行deploy:assets:precompile任务时突然编译失败。远程服务器运行命令/usr/local/rvm/bin/rvm default do bundle exec rake assets:precompile,yarn安装完成后抛出Error: write EPIPE错误,最终触发SSHKit::Command::Failed: rake exit status: 1异常。

本地执行RAILS_ENV=production bundle exec rake assets:precompile可正常编译,查询得知write EPIPE或与内存泄漏相关,但无法理解突发原因。本地yarn版本为1.22.19,远程服务器为1.22.5。

错误日志:

00:10 deploy:assets:precompile
      01 /usr/local/rvm/bin/rvm default do bundle exec rake assets:precompile

      01 
      01 yarn install v1.22.5

      01 [1/4] Resolving packages...
      01 
log writing failed. "\xE2" from ASCII-8BIT to UTF-8
      01 ⠁ 

      01 

      01 
      01 [2/4] Fetching packages...
      01
info fsevents@2.3.2: The platform "linux" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "linux" is incompatible with this module.

info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...

      01 warning " > @stripe/react-stripe-js@1.4.0" has incorrect peer dependency "react@^16.8.0 || ^17.0.0".

      01 warning " > @stripe/react-stripe-js@1.4.0" has incorrect peer dependency "react-dom@^16.8.0 || ^17.0.0".

      01 warning " > react-daterange-picker@2.0.1" has incorrect peer dependency "moment-range@^3.0.3".

      01 
      01 warning " > react-daterange-picker@2.0.1" has incorrect peer dependency "react@0.14.x || 15.x.x || 16.x.x".
warning " > react-daterange-picker@2.0.1" has incorrect peer dependency "react-dom@0.14.x || 15.x.x || 16.x.x".
warning " > react-day-picker@7.4.8" has incorrect peer dependency "react@~0.13.x || ~0.14.x || ^15.0.0 || ^16.0.0".
warning "react-router-dom > react-router > mini-create-react-context@0.4.1" has incorrect peer dependency "react@^0.14.0 || ^15.0.0 || ^16.0.0 || ^17…
[4/4] Building fresh packages...

      01 
      01 Done in 9.94s.
      01 Compiling...
      01 Compilation failed:
      01 events.js:174
      01       throw er; // Unhandled 'error' event
      01       ^
      01
      01 Error: write EPIPE
      01     at ChildProcess.target._send (internal/child_process.js:762:20)
      01     at ChildProcess.target.send (internal/child_process.js:634:19)
      01     at ChildProcessWorker.send (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/workers/ChildProcessWorker.js:291:1…
      01     at WorkerPool.send (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/WorkerPool.js:32:34)
      01     at Farm._process (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/Farm.js:129:10)
      01     at Farm._enqueue (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/Farm.js:152:10)
      01     at Farm._push (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/Farm.js:159:12)
      01     at Promise (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/Farm.js:90:14)
      01     at new Promise (<anonymous>)
      01     at Farm.doWork (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/Farm.js:56:12)
      01     at JestWorker._callFunctionWithArgs (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/jest-worker/build/index.js:143:23)
      01     at TaskRunner.runTask (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/@rails/webpacker/node_modules/terser-webpack-plugin/dist/T…
      01     at enqueue (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/@rails/webpacker/node_modules/terser-webpack-plugin/dist/TaskRunner.j…
      01     at cache.get.then (/var/www/vhosts/admired-leadership/releases/20230124214219/node_modules/@rails/webpacker/node_modules/terser-webpack-plugin/dist/TaskR…
      01 Emitted 'error' event at:
      01     at process.nextTick (internal/child_process.js:766:39)
      01     at process._tickCallback (internal/process/next_tick.js:61:11)
      01
#<Thread:0x00000001312c51c8@/Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
        13: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
        12: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:31:in `run'
        11: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:31:in `instance_exec'
        10: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/capistrano-rails-1.4.0/lib/capistrano/tasks/assets.rake:67:in `block (4 levels) in <top (required)>'
         9: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:92:in `within'
         8: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/capistrano-rails-1.4.0/lib/capistrano/tasks/assets.rake:68:in `block (5 levels) in <top (required)>'
         7: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:100:in `with'
         6: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/capistrano-rails-1.4.0/lib/capistrano/tasks/assets.rake:69:in `block (6 levels) in <top (required)>'
         5: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:80:in `execute'
         4: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:148:in `create_command_and_execute'
         3: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:148:in `tap'
         2: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/abstract.rb:148:in `block in create_command_and_execute'
         1: from /Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/backends/netssh.rb:169:in `execute_command'
/Users/jaepark/.rvm/gems/ruby-2.6.6/gems/sshkit-1.19.1/lib/sshkit/command.rb:97:in `exit_status=': rake exit status: 1 (SSHKit::Command::Failed)
yarn install v1.22.5

解决办法

  • 统一yarn版本:将远程服务器的yarn升级到与本地一致的1.22.19,消除版本差异引发的兼容问题:
    npm install -g yarn@1.22.19
    
  • 检查服务器内存:write EPIPE通常是子进程因内存不足被终止导致,执行free -h查看内存使用情况。若内存不足,可临时添加swap空间或升级服务器配置。
  • 清理缓存:
    • 清理yarn缓存:
      yarn cache clean
      
    • 清理Rails资产缓存:
      bundle exec rake assets:clobber
      
    清理完成后重新执行部署任务。
  • 调整webpack并行编译配置:若为webpacker的terser插件并行编译占用过多内存,可修改config/webpack/production.js,减少并行进程数:
    const TerserPlugin = require('terser-webpack-plugin');
    module.exports = {
      optimization: {
        minimizer: [
          new TerserPlugin({
            parallel: 1, // 可根据服务器CPU核心数调整
          }),
        ],
      },
    };
    
  • 修复依赖兼容性:日志中显示多个React相关依赖存在peer dependency警告,虽不一定直接导致编译失败,但可尝试更新依赖到兼容版本,比如更新@stripe/react-stripe-js适配当前React版本,或调整React版本匹配依赖要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:27:41