2011-09-04 3 views
2

J'utilise capistrano pour déployer une application node.js et j'ai un problème avec la définition des tâches shell. Par exemple, pensé que j'ai NPM installé cela échoue:Problème avec Capistrano lors de l'exécution des tâches du shell (déploiement de nodejs)

run "npm install" NPM pas trouvé

et quand j'utilise

run "/opt/nvm/'cat /opt/nvm/alias/default'/bin/npm install" l'erreur est noeud introuvable

Le Deploy est géré par un utilisateur spécial pour le déploiement.

Pourriez-vous dire ce qui pourrait causer ce problème et comment le résoudre?

Répondre

2

Les sons comme les exécutables npm/node ne se trouvent pas dans $ PATH pour l'utilisateur distant qui exécute le script Capistrano.

Vous devriez vérifier quel utilisateur Capistrano est en cours d'exécution au fur et à ce que le $ PATH est (et corriger au besoin)

+0

Salut @secoif, voici le $ PATH de l'utilisateur qui est utilisé pour la deploy Capistrano: /opt/NVM/v0 .4.11/bin:/usr/local/rvm/bin: /usr/local/rvm/gems/[email protected]/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 Semble que le chemin vers le noeud est présent. Avez-vous d'autres suggestions? Merci d'avance –

+0

C'est l'utilisateur sur la télécommande? – timoxley

+0

C'est l'utilisateur sur le serveur. –

3

En utilisant NVM et Capistrano travaille pour moi en exécutant la commande par bash et l'approvisionnement le fichier nvm.sh en premier.

Mon NVM est installé dans /opt/nvm, de sorte que la tâche npm install pourrait ressembler à ceci:

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 

donc pas besoin de régler manuellement le chemin vers les binaires en lisant le fichier d'alias de NVM.

1

Je fini par ajouter à mon Capfile

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

En attendant (plus d'un an retour tho) J'ai créé une extension Capistrano pour faciliter l'utilisation de NVM: https://github.com/koenpunt/capistrano-nvm

L'extension par défaut, node et npm, mais vous pouvez ajouter n'importe quel exécutable qui a besoin de nvm pour l'exécuter (par exemple grunt).

Une configuration de base travaillerait en ajoutant ce qui suit à votre 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

Juste ne fonctionne pas !!! Note: J'utilise des rampes. – Lewisou

Questions connexes