2011-09-04 101 views
2

我正在使用capistrano部署node.js應用程序,並且在設置shell任務時遇到 問題。 例如,以爲我有NPM安裝失敗:使Capistrano運行shell任務時出現問題(nodejs部署)

run "npm install" NPM沒有找到

,當我使用

run "/opt/nvm/'cat /opt/nvm/alias/default'/bin/npm install" 的節點沒有發現錯誤

部署由管理一個特殊的部署用戶。

請問可能會導致此問題以及如何解決它?

回答

2

對於執行Capistrano腳本的遠程用戶而言,npm/node可執行文件的聲音不在$ PATH中。

你應該加倍通過bash和採購檢查Capistrano的正在運行的用戶爲,什麼$ PATH是(根據需要修正)

+0

嗨@secoif,這裏是其用於Capistrano的部署在用戶的$ PATH: 的/ opt/NVM/V0 .4.11 /斌:在/ usr /本地/ RVM /斌:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/gems/ruby-1.9.2- P290 @全球/斌:/usr/local/rvm/rubies/ruby-1.9.2-p290/bin:在/ usr/local/bin目錄:在/ usr/local/bin目錄:在/ usr/bin中:/ bin中:在/ usr /本地/遊戲:/ usr/games 似乎存在節點的路徑。你有什麼其他的建議?在此先感謝 –

+0

這是遠程用戶? – timoxley

+0

這就是服務器上的用戶。 –

3

使用NVMCapistrano的爲我工作運行命令首先是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別名文件手動設置路徑的二進制文件。

1

我最終加入這個我Capfile

set :default_environment, { 
    'PATH' => "$PATH:/usr/local/ruby/bin/:/home/ubuntu/.nvm/v0.10.21/bin" 
} 
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} 
+1

只是不工作!注意:我正在使用bower-rails。 – Lewisou