[英]How to Configure Capistrano to Deploy from Local Git Repository?
What changes do I need to make to the deploy.rb
file below to make it deploy my app from a local git repo? 我需要对下面的
deploy.rb
文件进行哪些更改才能从本地git repo部署我的应用程序? If I can't deploy from a local repo, can I have capistrano use the working copying instead? 如果我无法从本地仓库部署,我可以让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"
That's easy: 这很简单:
set :scm, :none
set :repository, "."
set :deploy_via, :copy
Simply run Capistrano from the root of your project. 只需从项目的根目录运行Capistrano。
The deploy_via, :copy
has 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, 'git@bitbucket.org: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
的根路径/home/deploy/bare_repo/my_project.git
。
set :repository, 'file:///path/to/your/git_repository'
set :local_repository, "file://."
set :scm, :git
# set :deploy_via, :copy # you must comment it
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_revision
task in your deploy.rb which checks whether remote is in sync with local git. 如果您使用本地副本(并且没有Github上的项目),那么禁用
:check_revision
deploy.rb中的:check_revision
任务也是明智的,它检查远程是否与本地git同步。
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: 小心删除以前的回购:
task :remove_repo do
on roles(:all) do
execute "rm -r #{repo_path}"
end
end
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.
但是copy_cache只有在scm不是none时才可用(sync使用scm)这意味着从工作副本部署只能用缓慢的副本完成。 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.
您仍然需要在本地提交更改,但不需要推送它们。
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. 理想情况下,即使没有scm用于从工作副本部署到工作,也应该实现同步本地缓存。 great feature to add to capistrano
添加到capistrano的强大功能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.