如何配置Capistrano从本地Git存储库部署?

时间:2011-04-03 20:35:32

标签: ruby-on-rails git capistrano

我需要对下面的deploy.rb文件进行哪些更改才能从本地git repo部署我的应用程序?如果我不能从本地仓库部署,我可以让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 个答案:

答案 0 :(得分:56)

这很简单:

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

只需从项目的根目录中运行Capistrano。

答案 1 :(得分:8)

版本3中已删除deploy_via, :copy

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你正在寻找一个文件,并且前面的斜杠需要指向一个类似{{1}的根路径}}

答案 2 :(得分:7)

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

答案 3 :(得分:5)

我使用了@Ariejan和@HungYuHei的组合,这些答案对我有用。

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

如果您使用本地副本(并且没有Github上的项目),那么在deploy.rb中禁用:check_revision任务也是明智的,它会检查远程是否与本地git同步。 / p>

答案 4 :(得分:4)

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

答案 5 :(得分:0)

通常通过副本部署超级慢。 但是只有当scm不是none时才使用copy_cache(sync使用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的好功能