我正在使用capistrano来部署node.js应用程序,并且有一个 设置shell任务的问题。 例如,以为我安装了npm这会失败:
run "npm install"
npm未找到
当我使用
时 run "/opt/nvm/'cat /opt/nvm/alias/default'/bin/npm install"
错误是找不到节点
部署由特殊用户进行部署。
您能告诉我们可能导致此问题的原因以及解决方法吗?
答案 0 :(得分:3)
通过bash
运行命令并首先获取nvm.sh
文件,使用 NVM 和 Capistrano 对我有用。
我的NVM安装在/opt/nvm
中,因此npm install
任务看起来像这样:
namespace :npm do
desc 'Install the current npm environment.'
task :install do
invoke_command "bash -c '. /opt/nvm/nvm.sh && cd #{current_path} && npm install'", :via => run_method
end
end
因此,无需通过从NVM读取别名文件来手动设置二进制文件的路径。
答案 1 :(得分:2)
听起来npm / node可执行文件不在执行Capistrano脚本的远程用户的$ PATH上。
您应该仔细检查Capistrano正在运行的用户以及$ PATH是什么(并根据需要进行更正)
答案 2 :(得分:1)
我最后将此添加到我的Capfile
set :default_environment, {
'PATH' => "$PATH:/usr/local/ruby/bin/:/home/ubuntu/.nvm/v0.10.21/bin"
}
答案 3 :(得分:0)
与此同时(超过一年后),我创建了一个Capistrano扩展,以便于使用nvm:https://github.com/koenpunt/capistrano-nvm
默认情况下,扩展程序会映射node
和npm
,但您可以添加任何需要nvm才能运行的可执行文件(例如。grunt
)。
基本设置可以通过将以下内容添加到deploy.rb
:
require 'capistrano/nvm'
set :nvm_type, :user # or :system, depends on your nvm setup
set :nvm_node, 'v0.10.21'
set :nvm_map_bins, %w{node npm}