Как настроить Capistrano для развертывания из локального репозитория Git? - PullRequest
51 голосов
/ 04 апреля 2011

Какие изменения мне нужно внести в файл deploy.rb ниже, чтобы он развернул мое приложение из локального репозитория git? Если я не могу выполнить развертывание из локального репозитория, могу ли я использовать Capistrano вместо рабочего копирования?

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"

Ответы [ 6 ]

56 голосов
/ 04 апреля 2011

Это просто:

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

Просто запустите Capistrano из корня вашего проекта.

8 голосов
/ 28 августа 2014

deploy_via, :copy был удален в версии 3.

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

В большинстве случаев ваш код должен находиться в онлайн-хранилище, таком как github или bitbucket, а затем вам просто нужно установить эту строку в файле deploy.rb:

set :repo_url, 'git@bitbucket.org:my_account/my_project.git'

Хотя, если у вас есть репозиторий на удаленном сервере, который вы тоже развертываете, вы должны изменить эту строку в файле deploy.rb на следующую:

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

Имейте в виду, что три прямые косые черты важны, поскольку file:// сообщает capistrano, что вы ищете файл, а предыдущая косая черта необходима для указания корневого пути, который будет выглядеть примерно как /home/deploy/bare_repo/my_project.git.

7 голосов
/ 21 января 2013
set :repository, 'file:///path/to/your/git_repository'
set :local_repository, "file://."
set :scm, :git
# set :deploy_via, :copy # you must comment it
5 голосов
/ 31 июля 2013

Я использовал комбинацию ответов @Ariejan и @HungYuHei, которая работала для меня.

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

Если вы используете локальное копирование (и у вас нет проекта на Github), то также разумно отключить задачу :check_revision в вашем deploy.rb, которая проверяет, синхронизируется ли удаленное сместный мерзавец.

4 голосов
/ 15 января 2015

Решение Capistrano 3, которое работает для меня:

  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

Перед развертыванием вы загружаете файл tar.gz на сервер, разархивируйте и, наконец, сбросьте: repo_url в файловый режим.

Позаботьтесь об удалении предыдущего репо:

task :remove_repo do
  on roles(:all) do
    execute "rm -r #{repo_path}"
  end
end
0 голосов
/ 19 июля 2013

обычно развертывание через копирование происходит очень медленно. но copy_cache доступно, только если scm не равно none (синхронизация использует scm) это означает, что развертывание из рабочей копии может быть сделано только с медленной копией. Мне удалось найти быструю настройку для развертывания копии из локального репозитория. Вам все еще нужно локально фиксировать изменения, но не нужно их нажимать.

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

К сожалению, иногда он таинственным образом разрывается с:

fatal: Could not parse object 'c438b9d1242cb311be43d681e3f89bc486d748ed'.`

В идеале должна быть реализована синхронизация локального кэша, даже если для развертывания рабочей копии не используется scm. отличная возможность добавить в Capistrano

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...