ruby - rails - capistrano jamon
La implementación de Capistrano falla después de que cambie la URL del repositorio (9)
Aquí está la versión de Capistrano 3 de lo que esta respuesta habla. Puede ser tedioso hacer lo que la respuesta sugiere en cada servidor.
Así que deploy.rb
en deploy.rb
y luego ejecute cap <environment> deploy:fix_repo_origin
namespace :deploy do
desc ''Fix repo origin, for use when changing git repo URLs''
task :fix_repo_origin do
on roles(:web) do
within repo_path do
execute(:git, "remote set-url origin #{repo_url}")
end
end
end
end
Tengo una implementación simple a través de capistrano desde un repositorio de Git. Al principio estaba implementando el formulario de GitHub, todo funcionó bien. Pero luego moví mi repositorio a BitBucket y ahora estoy obteniendo
fatal: Could not parse object ''9cfb...''.
El problema desaparece una vez que cambio
set :deploy_via, :remote_cache
a
set :deploy_via, :copy
pero eso no soluciona el problema, solo lo pasa por alto. ¿Hay alguna manera de decirle a capistrano que simplemente deje caer el viejo caché?
Debes cambiar el origen de git en tu carpeta / shared / cached-copy
cd /var/www/your-project/production/shared/cached-copy
git remote remove origin
git remote add origin [email protected]:/origin.git
intentar implementar la tapa de producción
Depende de su versión Capistrano 3 es diferente de sus antepasados anteriores:
Lea mi respuesta original aquí y cómo solucionar problemas similares. Error de Capistrano al cambiar de repositorio usando git
La forma más simple es simplemente cambiar la url del repositorio por la nueva en .git / config en el directorio compartido / copiado en caché en el servidor web. Entonces puedes hacer un despliegue normal como de costumbre.
Lo resolví con lo siguiente en deploy.rb
:
namespace :deploy do
task :cope_with_git_repo_relocation do
run "if [ -d #{shared_path}/cached-copy ]; then cd #{shared_path}/cached-copy && git remote set-url origin #{repository}; else true; fi"
end
end
before "deploy:update_code", "deploy:cope_with_git_repo_relocation"
Hace que la implementación sea un poco más lenta, por lo que vale la pena eliminarla una vez que te sientas cómodo de que todos tus objetivos de implementación se hayan puesto al día.
Si necesita hacer muchos repos, es posible que desee agregarle una tarea.
Para capistrano 3 agrega esta tarea en su deploy.rb
desc "remove remote git cache repository"
task :remove_git_cache_repo do
on roles(:all) do
execute "cd #{fetch(:deploy_to)} && rm -Rf repo"
end
end
Y luego ejecútalo una vez para cada etapa:
cap testing remove_git_cache_repo
Tengo que decir que no estoy seguro, ya que no he podido probar esto, pero esto debería funcionar:
cap deploy:cleanup -s keep_releases=0
Como borra cada versión (caché) del servidor.
Aparentemente, también deberá eliminar shared/cached-copy
, ya que no parece haber sido limpiada por la llamada anterior de Capistrano de acuerdo con el comentario a continuación.
Capistrano 2 y abajo
SSH a su servidor y actualice el repositorio en ./shared/cached-copy/.git/config
de la carpeta de despliegue, o simplemente elimine el ./shared/cached-copy
Capistrano 3 y superior
SSH a su servidor y actualice el repositorio en ./repo/config
de la carpeta de implementación.
Revise las implementaciones de Fixing Capistrano 3 después de un cambio en el repositorio
Capistrano 2.X
Eliminar y volver a clonar el repositorio con la nueva dirección:
cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://[email protected]/new/repo.git cached-copy
Modifique su config/deploy.rb
para usar el nuevo repositorio:
set :repository, "ssh://[email protected]/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache
Implementar de nuevo:
cap deploy
Capistrano 3.X
- Elimina el
$deploy_to/repo
- Modifique su
config/deploy.rb
(igual que 2.X) -
cap deploy