2

我正在使用 capistrano 部署 node.js 应用程序,并且在设置 shell 任务时遇到问题。例如,以为我安装了 npm 失败:

run "npm install" 未找到 npm

当我使用

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

部署由特定用户管理以进行部署。

您能否告诉可能导致此问题的原因以及如何解决?

4

5 回答 5

3

通过运行命令并首先获取文件,使用NVMCapistrano对我有用。bashnvm.sh

我的 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 读取别名文件来手动设置二进制文件的路径。

于 2013-02-17T22:24:33.227 回答
2

听起来 npm/node 可执行文件不在执行 Capistrano 脚本的远程用户的 $PATH 上。

您应该仔细检查 Capistrano 以哪个用户身份运行以及 $PATH 是什么(并根据需要进行更正)

于 2011-09-05T02:20:15.207 回答
1

我最后把这个添加到我的Capfile

set :default_environment, {
  'PATH' => "$PATH:/usr/local/ruby/bin/:/home/ubuntu/.nvm/v0.10.21/bin"
}
于 2013-12-06T10:39:51.060 回答
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}
于 2015-03-31T10:04:07.263 回答
0

我能够通过在 capistrano 部署脚本中添加如下行来影响节点版本更改:

execute :'. ~/.nvm/nvm.sh && nvm use vOLDER_VERSION && nvm alias default vOLDER_VERSION'
execute :npm, 'install', '--silent --no-progress'
execute :npm, 'run', 'build'
execute :'. ~/.nvm/nvm.sh && nvm use stable && nvm alias default stable'

vOLDER_VERSION选择的版本在哪里。

它的工作方式是获取 nvm,将其设置为使用指定的版本,并将该版本设置为默认值。然后在运行 npm 步骤后恢复这些更改。这样,部署的其他部分或其他部署仍然可以使用最新版本。

如果您不关心其他部署,您可以为您的部署用户运行一次该步骤:

su deployerUser
nvm use vOLDER_VERSION
nvm alias default vOLDER_VERSION
于 2021-08-19T19:56:04.460 回答