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

生产部署EC2应用时Node版本不兼容问题求助

解决Capistrano部署EC2时Node版本不兼容问题

核心问题

你之前的操作都在本地环境进行,但Capistrano部署是在EC2服务器上执行命令,服务器的Node版本仍为12.22.9,这才是导致版本不兼容的根本原因,本地修改不会同步到服务器。

解决步骤

1. 在EC2服务器上配置正确的Node版本

登录你的EC2服务器,执行以下操作:

  • 安装nvm(Node版本管理器):
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/latest/install.sh | bash
    
  • 重新加载shell配置文件(根据你使用的shell选择对应命令):
    source ~/.bashrc  # Bash用户
    # 或
    source ~/.zshrc   # Zsh用户
    
  • 安装指定的Node版本:
    nvm install 14.21.3
    
  • 设置该版本为服务器默认Node版本,确保后续会话自动使用:
    nvm alias default 14.21.3
    
  • 验证版本是否生效:
    node -v
    
    输出应为v14.21.3

2. 让Capistrano部署时加载正确的Node环境

Capistrano的部署进程不会自动加载用户的shell配置,需要在部署配置中指定nvm路径和Node版本:

  • 如果你使用capistrano-nvm插件:
    1. 在项目Gemfile中添加插件依赖:
      gem 'capistrano-nvm'
      
    2. 执行bundle install安装插件
    3. 在Capfile中引入插件:
      require 'capistrano/nvm'
      
    4. 在config/deploy.rb中配置Node版本:
      set :nvm_node, '14.21.3'
      
  • 若不使用插件,直接在config/deploy.rb中添加以下配置:
    set :nvm_path, '$HOME/.nvm'
    set :nvm_node, 'v14.21.3'
    
    SSHKit.config.command_map[:node] = "#{fetch(:nvm_path)}/versions/node/#{fetch(:nvm_node)}/bin/node"
    SSHKit.config.command_map[:npm] = "#{fetch(:nvm_path)}/versions/node/#{fetch(:nvm_node)}/bin/npm"
    SSHKit.config.command_map[:yarn] = "#{fetch(:nvm_path)}/versions/node/#{fetch(:nvm_node)}/bin/yarn"
    

3. 恢复本地依赖文件

之前删除的package-lock.json、yarn.lock无需再用--ignore-engines生成,直接从仓库恢复或重新生成正常版本后推送到仓库,服务器部署时会根据这些文件安装对应依赖。

重新部署

执行部署命令验证:

bundle exec cap production deploy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:43:09