¿Cómo uso Capistrano congelado?
-
22-07-2019 - |
Pregunta
Historia de fondo
Estoy en Rails 2.1 y necesito congelar la gema de Capistrano en mi carpeta de proveedor (ya que mi host ha roto sus dependencias de gemas de cap y quiero ser lo más independiente posible).
En mi máquina de Windows local, puse lo siguiente my 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"
Las gemas ya estaban instaladas, así que las congelé. Comprobando ...
>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
Luego me comprometo a SVN localmente y actualizo en el cuadro de Linux prod.
Problema
Cuando intento ejecutar mi versión congelada de Capistrano me sale el siguiente error.
$ ./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
¿Alguna idea de lo que he hecho mal?
Actualizar
Solución
No has hecho nada malo. Estás viendo este problema porque el archivo cap
en capistrano / bin / cap
no debe ejecutarse de forma independiente. Verá el mismo resultado si intenta ejecutarlo desde su carpeta principal de gemas. El ejecutable cap
(almacenado en / usr / bin / cap
en una instalación estándar de Linux) requiere rubygems
, registra capistrano y luego carga el archivo capistrano / bin / cap
.
Una solución para esto sería agregar require 'rubygems'
a su archivo capistrano / bin / cap:
#!/usr/bin/env ruby
require 'rubygems'
require 'capistrano/cli'
Capistrano::CLI.execute
Si no desea modificar capistrano / bin / cap
, puede incluir específicamente la biblioteca rubygems cuando la ejecuta con el indicador -r. Su comando dado se vería así:
$ ruby -r rubygems ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
Otros consejos
Otra forma de usar una versión específica de Capistrano sería algo así como agregar un alias a su .bash_login como el siguiente:
alias cap1='cap _1.4.2_ '
donde cap1 es el comando que ejecutará y 1.4.2 es la versión que desea que ejecute ese comando, entonces puede:
cap1 deploy
luego usaría esa versión de capistrano para implementar su aplicación.