Pergunta

Backstory

Estou on Rails 2.1 e necessidade de congelar o gem Capistrano a minha pasta de fornecedor (como meu anfitrião quebrou suas dependências gem cap e eu quero me tornar o mais independente possível).

Na minha máquina de janelas locais Eu coloquei o seguinte minha environment.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"

As pedras já foram instalados e assim eu congelei-los. Verificando ...

>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

Eu, então, comprometer-se a SVN localmente e atualização na caixa Linux do prod.

Problema

Quando tento executar a minha versão congelada de Capistrano eu recebo o seguinte erro.

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

Todas as idéias que eu fiz de errado?

Atualização

Veja nova questão relacionada

Foi útil?

Solução

Você não fez nada de errado. Você está vendo esta questão porque o arquivo cap sob capistrano/bin/cap não se destina a ser executado como um stand-alone. Você verá o mesmo resultado se você tentar executá-lo a partir da pasta gem primária. O executável cap (armazenado a /usr/bin/cap em um linux instalação padrão) requer rubygems, registros Capistrano e então carrega o arquivo capistrano/bin/cap.

Uma solução para isso seria adicionar require 'rubygems' ao seu Capistrano bin / arquivo / cap:

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

Se você não deseja modificar capistrano/bin/cap você poderia incluir especificamente a biblioteca rubygems quando você executá-lo usando a opção -r. Seu comando dado ficaria assim:

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

Outras dicas

Outra maneira de usar uma versão específica de Capistrano seria algo como, adicionar um apelido para o seu .bash_login como o seguinte:

alias cap1='cap _1.4.2_ '

onde cap1 é o comando que será executado e 1.4.2 é a versão que você deseja que o comando para executar, então você pode:

cap1 deploy

Em seguida, use essa versão do Capistrano para implantar seu aplicativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top