【问题标题】:Problem with making Capistrano run the shell tasks (nodejs deploying)使 Capistrano 运行 shell 任务的问题(nodejs 部署)
【发布时间】:2011-11-10 02:11:53
【问题描述】:

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

run "npm install" 找不到 npm

当我使用时

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

部署由专门的用户进行部署管理。

能否请您说明可能导致此问题的原因以及如何解决?

【问题讨论】:

    标签: node.js capistrano npm


    【解决方案1】:

    使用 NVMCapistrano 对我有用,方法是通过 bash 运行命令并首先获取 nvm.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 读取别名文件来手动设置二进制文件的路径。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗨@secoif,这是用于 capistrano 部署的用户的 $PATH:/opt/nvm/v0.4.11/bin:/usr/local/rvm/bin:/usr/本地/rvm/gems/ruby-1.9.2-p290@awesomewidget/bin:/usr/local/rvm/gems/ruby-1.9.2-p290@global/bin:/usr/local/rvm/rubies/ruby- 1.9.2-p290/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 看来节点的路径是存在的。你有什么其他的建议?提前致谢
      • 那是遥控器上的用户?
      • 那是服务器上的用户。
      【解决方案3】:

      我最终将此添加到我的Capfile

      set :default_environment, {
        'PATH' => "$PATH:/usr/local/ruby/bin/:/home/ubuntu/.nvm/v0.10.21/bin"
      }
      

      【讨论】:

        【解决方案4】:

        与此同时(一年多前),我创建了一个 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}
        

        【讨论】:

          【解决方案5】:

          我能够通过在我的 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-07
            • 2014-05-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多