Ответ 1
Это легко:
set :scm, :none
set :repository, "."
set :deploy_via, :copy
Просто запустите Capistrano из корня вашего проекта.
Какие изменения необходимо внести в файл 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"
Это легко:
set :scm, :none
set :repository, "."
set :deploy_via, :copy
Просто запустите Capistrano из корня вашего проекта.
set :repository, 'file:///path/to/your/git_repository'
set :local_repository, "file://."
set :scm, :git
# set :deploy_via, :copy # you must comment it
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
.
Я использовал комбинацию ответов @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.
Решение 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
Обычно развертывание через копию происходит очень медленно. но 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