2011-04-03 6 views
50

¿Qué cambios debo hacer en el archivo deploy.rb a continuación para que implemente mi aplicación desde un repositorio de git local? Si no puedo implementar desde un repositorio local, ¿puedo hacer que capistrano use la copia de trabajo en su lugar?Cómo configurar Capistrano para implementar desde el repositorio local de Git?

set :application, "my_app" 
set :repository, "." 
set :local_repository, "file:///path/to/application/.git" 
set :deploy_to, "/data/www/apps/#{application}" 
set :deploy_via, :copy 
set :copy_cache, true 
set :user, "dane" 
set :use_sudo, false 

set :scm, :git # Should I change this to :none 
set :branch, "master" 

Respuesta

56

Eso es fácil:

set :scm, :none 
set :repository, "." 
set :deploy_via, :copy 

sólo tiene que ejecutar Capistrano de la raíz de su proyecto.

+5

+1. Pero, en capistrano v 2.12.0 también tuve que hacer 'set: local_repository,". "' – Zabba

+3

esto incluiría archivos que fueron ignorados en el scm ¿verdad? – lulalala

+13

No funciona con capistrano 3. Ideas? –

7
set :repository, 'file:///path/to/your/git_repository' 
set :local_repository, "file://." 
set :scm, :git 
# set :deploy_via, :copy # you must comment it 
0

normalmente implementar mediante copia es super lento. pero copy_cache solo está disponible si scm NO es ninguno (la sincronización usa scm) esto significa que la implementación desde la copia de trabajo solo se puede hacer con una copia inactiva. Logré encontrar una configuración rápida para el despliegue de copias del repositorio local que es rápido. Aún así, debe confirmar los cambios localmente, pero no es necesario que los presione.

set :scm, "git" 
set :local_repository, "file://." 
set :deploy_via, :copy 
# cache only seems to work if use scm 
set :copy_cache, true 
set :copy_via, :scp 
set :copy_exclude, [".zeus*", ".bundle", ".git", "tmp/*", "doc", "log/*", "fixtures/*"] 

Por desgracia, a veces se rompe misteriosamente con:

fatal: Could not parse object 'c438b9d1242cb311be43d681e3f89bc486d748ed'.` 

Lo ideal sería que la sincronización de caché local debe aplicarse incluso si no hay SMC se utiliza para el despliegue de la copia de trabajo a trabajar. gran característica para agregar a capistrano

5

Utilicé una combinación de @Ariejan y @HungYuHei respuestas que funcionó para mí.

set :deploy_via, :copy 
set :use_sudo, false  
set :scm, "git" 
set :repository, "." 
set :local_repository, "." 
set :branch, "master" 

Si utilizar copia local (y no tiene el proyecto en Github), entonces también es conveniente desactivar :check_revision tarea en su deploy.rb que comprueba si remoto está en sincronía con Git local.

+2

Me sale lo siguiente 'fatal: no hay control remoto configurado para enumerar referencias de' – Intentss

7

El deploy_via, :copy se ha caído en la versión 3.

https://github.com/capistrano/capistrano/issues/695

En la mayoría de los casos usted debe tener su código en un repositorio en línea como github o bitbucket, y luego sólo hay que establecer esta línea en su deploy.rb archivo:

set :repo_url, '[email protected]:my_account/my_project.git' 

Aunque si le sucede que tiene un repositorio en el servidor remoto que se va a implementar, lo que iba a cambiar esa línea en su archivo deploy.rb ser la siguiente:

set :repo_url, 'file:///home/deploy/bare_repo/my_project.git' 

Tenga en cuenta que las tres barras diagonales son importantes ya que el file:// dice Capistrano que usted está buscando un archivo, y se necesita la barra precedente para apuntar a una ruta raíz que sería algo así como /home/deploy/bare_repo/my_project.git.

solución
4

Capistrano 3, que está funcionando para mí:

before :deploy, :deploy_from_local_repo 

    task :deploy_from_local_repo do 
    set :repo_url, "file:///tmp/.git" 
    run_locally do 
     execute "tar -zcvf /tmp/repo.tgz .git" 
    end 
    on roles(:all) do 
     upload! '/tmp/repo.tgz', '/tmp/repo.tgz' 
     execute 'tar -zxvf /tmp/repo.tgz -C /tmp' 
    end 
    end 

Antes de implementar que está cargando un archivo tar.gz con el servidor, descomprimir y finalmente restablecer el: repo_url a modo de archivo.

Tenga cuidado para eliminar el repositorio permeable:

task :remove_repo do 
    on roles(:all) do 
    execute "rm -r #{repo_path}" 
    end 
end 
+0

Esto funciona para mí, excepto que recibí un error 'refs/stash no apunta a un objeto válido!' hasta que cambie el comando tar a 'tar -zcvf/tmp /repo.tgz --exclude = .git/refs/stash .git'. ¡Gracias! –

Cuestiones relacionadas