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

Dan*_*neS 51 git capistrano ruby-on-rails

我需要对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"
Run Code Online (Sandbox Code Playgroud)

Ari*_*jan 56

这很简单:

set :scm, :none
set :repository, "."
set :deploy_via, :copy
Run Code Online (Sandbox Code Playgroud)

只需从项目的根目录运行Capistrano.

  • 它不适用于capistrano 3.想法? (14认同)
  • +1.但是,在capistrano v 2.12.0中,我还必须做`set:local_repository,"."` (5认同)
  • 这将包括在scm中被忽略的文件吗? (3认同)

Max*_*mus 8

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'
Run Code Online (Sandbox Code Playgroud)

虽然如果您正在部署的远程服务器上也有一个存储库,那么您可以将deploy.rb文件中的那一行更改为:

set :repo_url, 'file:///home/deploy/bare_repo/my_project.git'
Run Code Online (Sandbox Code Playgroud)

请记住,三个正斜杠是重要的,因为file://告诉capistrano你正在寻找一个文件,并且前面的斜杠需要指向一个类似的根路径/home/deploy/bare_repo/my_project.git.


小智 7

set :repository, 'file:///path/to/your/git_repository'
set :local_repository, "file://."
set :scm, :git
# set :deploy_via, :copy # you must comment it
Run Code Online (Sandbox Code Playgroud)


jle*_*ijo 7

为我运行的 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
Run Code Online (Sandbox Code Playgroud)

在部署之前,您将 tar.gz 文件上传到服务器,解压缩并最终将 :repo_url 重置为文件模式。

注意删除之前的 repo:

task :remove_repo do
  on roles(:all) do
    execute "rm -r #{repo_path}"
  end
end
Run Code Online (Sandbox Code Playgroud)


roh*_*hra 5

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

set :deploy_via, :copy
set :use_sudo, false    
set :scm, "git"
set :repository, "."
set :local_repository, "."
set :branch, "master"
Run Code Online (Sandbox Code Playgroud)

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

  • 我得到以下`致命:没有远程配置列出来自.的引用 (2认同)