Despliegue de Capistrano con dos repositorys Git

Aquí está mi script de implementación fácil para mi proyecto Ruby.

set :application, "data" set :repo_url, "git@github-data:MyCompany/api_data.git" set :deploy_to, '/var/www/data' append :linked_files, "config/secrets.yml" append :linked_dirs, "log" namespace :deploy do desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do execute :touch, release_path.join('tmp/restart.txt') end end end 

Esto funciona bien, pero necesito agregar un repository adicional y tener que desplegarlo en un subdirectory del proyecto principal. Hasta ahora he intentado algunas cosas sin éxito. Gracias por cualquier ayuda

Cap 3.8.2

Expandiendo mi comentario en una respuesta.

Otra opción es desplegar los dos repositorys de forma independiente en diferentes carpetas y usar linked_dirs y symlinks para conectar los dos. Uso este método todo el time.

Supongamos que la ruta de lanzamiento de su aplicación es $APP_PATH y la ruta de lanzamiento para su repository secundario es $OTHER_APP_PATH . Supongamos también, por ejemplo, que necesita que el repository secundario se muestre en lib/myapp en su aplicación.

Comenzaría por implementar su aplicación secundaria en $OTHER_APP_PATH en su server.

A continuación, agregue append :linked_dirs, 'lib/myapp' a la configuration deploy.rb de su aplicación. Cuando implemente, debe tener una carpeta vacía en $APP_PATH/shanetworking/lib/myapp que se $APP_PATH/current/lib/myapp desde $APP_PATH/current/lib/myapp . Elimine esa carpeta ( rmdir $APP_PATH/shanetworking/lib/myapp ) y reemplácela con un enlace simbólico al directory current de su aplicación secundaria ( ln -s $OTHER_APP_PATH/current $APP_PATH/shanetworking/lib/myapp ).

Ahora el contenido de su aplicación secundaria debería aparecer en la carpeta lib/myapp su aplicación principal.

Dado que es probablemente una limitación capistrano, veo dos enfoques posibles de inmediato (definitivamente hay más)

  • Haga que el subproyecto sea una joya e inclúyalo de esa manera
  • Use algo como Fabric que, si bien el código python es más una herramienta de implementación iterativa guionizada