Domanda

Backstory

Sono su Rails 2.1 e devo congelare la gemma Capistrano nella cartella del mio fornitore (poiché il mio host ha rotto le dipendenze gemma del cap e voglio rendermi il più indipendente possibile).

Sul mio computer Windows locale ho inserito il seguente mio ambiente.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"

Le gemme erano già installate e quindi le ho congelate. Verifica in corso ...

>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

Mi impegno quindi a SVN localmente e aggiorno sulla casella prod Linux.

Problema

Quando provo ad eseguire la mia versione bloccata di Capistrano, visualizzo il seguente errore.

$ ./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

Qualche idea su cosa ho fatto di sbagliato?

Aggiornamento

Vedi nuova domanda correlata

È stato utile?

Soluzione

Non hai fatto nulla di male. Stai riscontrando questo problema perché il file cap in capistrano / bin / cap non è pensato per essere eseguito come autonomo. Vedrai lo stesso risultato se provi a eseguirlo dalla cartella gem principale. L'eseguibile cap (memorizzato in / usr / bin / cap su un'installazione standard di Linux) richiede rubygems , registra capistrano e quindi carica il file capistrano / bin / cap .

Una soluzione a ciò sarebbe aggiungere richiedere 'rubygems' al tuo file capistrano / bin / cap:

#!/usr/bin/env ruby
require 'rubygems'
require 'capistrano/cli'
Capistrano::CLI.execute

Se non vuoi modificare capistrano / bin / cap potresti includere specificamente la libreria rubygems quando la esegui usando il flag -r. Il tuo comando dato sarebbe simile al seguente:

$ ruby -r rubygems ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations

Altri suggerimenti

Un altro modo di utilizzare una versione specifica di Capistrano sarebbe qualcosa di simile, aggiungere un alias al tuo .bash_login come il seguente:

alias cap1='cap _1.4.2_ '

dove cap1 è il comando che eseguirai e 1.4.2 è la versione che vuoi eseguire quel comando, quindi puoi:

cap1 deploy

utilizza quindi quella versione di capistrano per distribuire l'applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top