Ruby-on-rails 如何配置 Capistrano 以从本地 Git 存储库部署?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5532323/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 00:50:39  来源:igfitidea点击:

How to Configure Capistrano to Deploy from Local Git Repository?

ruby-on-railsgitcapistrano

提问by DaneS

What changes do I need to make to the deploy.rbfile below to make it deploy my app from a local git repo? If I can't deploy from a local repo, can I have capistrano use the working copying instead?

我需要对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"

回答by Ariejan

That's easy:

这很容易:

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

Simply run Capistrano from the root of your project.

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

回答by Maximus

The deploy_via, :copyhas been dropped in version 3.

deploy_via, :copy在3版本已被删除。

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

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

In most cases you should have your code in a online repository like github or bitbucket, and then you just have to set this line in your deploy.rb file:

在大多数情况下,您应该将代码放在 github 或 bitbucket 等在线存储库中,然后您只需在 deploy.rb 文件中设置这一行:

set :repo_url, '[email protected]:my_account/my_project.git'

Though if you happen to have a repository on the remote server that you are deploying too, then you would change that line in your deploy.rb file to be this:

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

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

Keep in mind that the three forward slashes are important since the file://tells capistrano that you are looking for a file, and the preceding slash is needed to point to a root path which would be something like /home/deploy/bare_repo/my_project.git.

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

回答by HungYuHei

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

回答by rohitmishra

I used a combination of @Ariejan and @HungYuHei answers which worked for me.

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

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

If you use local copy (and don't have the project on Github), then it is also wise to disable :check_revisiontask in your deploy.rb which checks whether remote is in sync with local git.

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

回答by jlebrijo

Capistrano 3 solution which is running for me:

为我运行的 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

Before deploying you are uploading a tar.gz file to the server, unzip and finally reset the :repo_url to file mode.

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

Take care to remove the pervious repo:

注意删除之前的 repo:

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

回答by Viktor Trón

normally deploy via copy is super slow. but copy_cache only available if scm is NOT none (sync uses scm) this means that deploy from working copy can only be done with sluggish copy. I managed to find a fast setup for copy deploy from local repo that is fast. You still need to locally commit changes though but do not need to push them.

通常通过复制部署是超级慢的。但是 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/*"]

Unfortunately it sometimes breaks mysteriously with:

不幸的是,它有时会神秘地打破:

fatal: Could not parse object 'c438b9d1242cb311be43d681e3f89bc486d748ed'.`

Ideally syncing local cache should be implemented even if no scm is used for deploy from working copy to work. great feature to add to capistrano

理想情况下,即使没有 scm 用于从工作副本部署到工作,也应该实现同步本地缓存。添加到 capistrano 的强大功能