Подтвердить что ты не робот

Как настроить Capistrano для развертывания из локального репозитория Git?

Какие изменения необходимо внести в файл deploy.rb ниже, чтобы развернуть мое приложение из локального репозитория 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"
4b9b3361

Ответ 1

Это легко:

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

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

Ответ 2

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

Ответ 3

deploy_via, :copy был сброшен в версии 3.

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

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

set :repo_url, '[email protected]: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.

Ответ 4

Я использовал комбинацию ответов @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, которая проверяет синхронизацию удаленного с локальным git.

Ответ 5

Решение 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 на сервер, распаковываете и, наконец, reset: repo_url в режим файла.

Следите за тем, чтобы удалить предыдущее репо:

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

Ответ 6

Обычно развертывание через копию происходит очень медленно. но copy_cache доступен только в том случае, если scm НЕ НЕ (синхронизация использует 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