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

使用Capistrano 3在远程服务器执行npm install时遇npm未找到错误

解决Capistrano执行npm install时"npm: command not found"的问题

问题分析

远程服务器已通过nvm安装npm,但Capistrano执行部署任务时找不到npm命令,核心原因有两点:

  • Capistrano默认使用非登录、非交互Shell,不会自动加载~/.bashrc或~/.profile中的nvm环境配置
  • 直接用字符串形式的execute调用命令,可能无法正确继承set :default_env中设置的环境变量

解决方案

方案1:直接使用npm的绝对路径

跳过环境变量配置,直接指定npm的完整路径执行:

namespace :npm do
    desc 'Run npm install (locally project)'
    task :install do
      puts "--> Installing npm install (middle) "
      on roles(:app) do
        execute "cd #{release_path}/angular && /home/oasis/.nvm/versions/node/v8.9.4/bin/npm install"
      end  
    end
end

方案2:加载nvm环境后执行

在执行npm命令前,先加载nvm的配置脚本并切换到对应node版本:

namespace :npm do
    desc 'Run npm install (locally project)'
    task :install do
      puts "--> Installing npm install (middle) "
      on roles(:app) do
        execute "source ~/.nvm/nvm.sh && nvm use v8.9.4 && cd #{release_path}/angular && npm install"
      end  
    end
end

方案3:通过with_env确保环境变量生效

使用Capistrano的with_env方法显式传递环境变量,确保Shell能识别npm路径:

set :default_env, { path: "$PATH:/home/oasis/.nvm/versions/node/v8.9.4/bin"}

namespace :npm do
    desc 'Run npm install (locally project)'
    task :install do
      puts "--> Installing npm install (middle) "
      on roles(:app) do
        with_env fetch(:default_env) do
          execute "cd #{release_path}/angular && npm install"
        end
      end  
    end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:05:37