使Capistrano运行shell任务的问题(nodejs部署)

时间:2011-09-04 12:54:07

标签: node.js capistrano npm

我正在使用capistrano来部署node.js应用程序,并且有一个 设置shell任务的问题。 例如,以为我安装了npm这会失败:

run "npm install" npm未找到

当我使用

run "/opt/nvm/'cat /opt/nvm/alias/default'/bin/npm install" 错误是找不到节点

部署由特殊用户进行部署。

您能告诉我们可能导致此问题的原因以及解决方法吗?

4 个答案:

答案 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

默认情况下,扩展程序会映射nodenpm,但您可以添加任何需要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}