Comment utiliser Capistrano congelé?
-
22-07-2019 - |
Question
Backstory
Je suis sur Rails 2.1 et je dois geler la gemme Capistrano dans mon dossier de fournisseur (mon hôte ayant brisé leurs dépendances, je souhaite être le plus indépendant possible.)
Sur ma machine Windows locale, j'ai mis ce qui suit dans mon environnement.rb
config.gem "capistrano", :version => "2.5.2"
config.gem "net-ssh", :lib => "net/ssh", :version => "2.0.4"
config.gem "net-scp", :lib => "net/scp", :version => "1.0.1"
config.gem "net-sftp", :lib => "net/sftp", :version => "2.0.1"
config.gem "net-ssh-gateway", :lib => "net/ssh/gateway", :version => "1.0.0"
Les gemmes étaient déjà installées et je les ai gelées. Vérification ...
>rake gems
...
[F] capistrano = 2.5.2
[F] net-ssh = 2.0.4
[F] net-scp = 1.0.1
[F] net-sftp = 2.0.1
[F]net-ssh-gateway = 1.0.0
Je commets ensuite sur SVN localement et mets à jour sur la machine Linux prod.
Problème
Lorsque j'essaie d'exécuter ma version gelée de Capistrano, l'erreur suivante apparaît.
$ ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
./vendor/gems/capistrano-2.5.2/bin/cap:3:in `require': no such file to load --capistrano/cli (LoadError)
from ./vendor/gems/capistrano-2.5.2/bin/cap:3
Avez-vous des idées sur ce que j'ai mal fait?
Mettre à jour
La solution
Vous n'avez rien fait de mal. Vous rencontrez ce problème car le fichier cap
sous capistrano / bin / cap
n'est pas conçu pour être exécuté de manière autonome. Vous obtiendrez le même résultat si vous essayez de l'exécuter à partir de votre dossier de gem primaire. L'exécutable cap
(stocké dans / usr / bin / cap
sur une installation standard de Linux) nécessite rubygems
, enregistre capistrano et puis charge le fichier capistrano / bin / cap
.
Une solution à ce problème consisterait à ajouter require 'rubygems'
à votre fichier capistrano / bin / cap:
#!/usr/bin/env ruby
require 'rubygems'
require 'capistrano/cli'
Capistrano::CLI.execute
Si vous ne souhaitez pas modifier capistrano / bin / cap
, vous pouvez spécifiquement inclure la bibliothèque rubygems lorsque vous l'exécutez à l'aide de l'indicateur -r. Votre commande donnée ressemblerait à ceci:
$ ruby -r rubygems ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
Autres conseils
Vous pouvez également utiliser une version spécifique de Capistrano en ajoutant un alias à votre fichier .bash_login, comme suit:
alias cap1='cap _1.4.2_ '
où cap1 est la commande que vous allez exécuter et 1.4.2 est la version que vous voulez que cette commande soit exécutée, vous pouvez alors:
cap1 deploy
utiliserait alors cette version de capistrano pour déployer votre application.