web-dev-qa-db-fra.com

Comment configurer Capistrano pour se déployer à partir du référentiel Git local?

Quelles modifications dois-je apporter au fichier deploy.rb ci-dessous pour lui permettre de déployer mon application à partir d'un dépôt Git local? Si je ne peux pas déployer depuis un dépôt local, puis-je demander à capistrano d'utiliser la copie de travail à la place?

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"
50
DaneS

C'est facile:

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

Exécutez simplement Capistrano à la racine de votre projet.

56
Ariejan

Le deploy_via, :copy a été supprimé dans la version 3. 

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

Dans la plupart des cas, vous devriez avoir votre code dans un référentiel en ligne tel que github ou bitbucket, puis il vous suffit de définir cette ligne dans votre fichier deploy.rb:

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

Toutefois, si vous déployez également un référentiel sur le serveur distant, vous devez modifier cette ligne dans votre fichier deploy.rb de la manière suivante:

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

Gardez à l'esprit que les trois barres obliques sont importantes car le file:// indique à capistrano que vous recherchez un fichier et que la barre précédente est nécessaire pour indiquer un chemin racine qui serait quelque chose comme /home/deploy/bare_repo/my_project.git.

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

J'ai utilisé une combinaison de réponses @Ariejan et @HungYuHei qui a fonctionné pour moi. 

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

Si vous utilisez une copie locale (et n'avez pas le projet sur Github), il est également sage de désactiver la tâche :check_revision dans votre deploy.rb, qui vérifie si remote est synchronisé avec git local.

5
rohitmishra

La solution Capistrano 3 qui fonctionne pour moi:

  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

Avant de déployer, vous chargez un fichier tar.gz sur le serveur, décompressez et enfin réinitialisez: repo_url en mode fichier.

Prenez soin de supprimer le rapport précédent:

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

normalement, le déploiement via copie est très lent . mais copy_cache n'est disponible que si scm n'est PAS aucun (la synchronisation utilise scm) Cela signifie que le déploiement à partir d'une copie de travail ne peut être effectué qu'avec une copie lente ..__ une configuration rapide pour le déploiement de copie à partir d'un référentiel local qui est rapide . Vous devez néanmoins valider localement les modifications, mais vous n'avez pas besoin de les pousser.

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/*"]

Malheureusement, il rompt parfois mystérieusement avec:

fatal: Could not parse object 'c438b9d1242cb311be43d681e3f89bc486d748ed'.`

Idéalement, la synchronisation du cache local devrait être mise en œuvre même si aucun scm n'est utilisé pour le déploiement de la copie de travail vers le travail. grande fonctionnalité à ajouter à capistrano

0
Viktor Trón