我与下的lib/Capistrano的/ setup.rake文件中的以下特殊任务部署Web应用程序:为什么Capistrano在部署时删除.git存储库?
69 desc "Publish git commit log to changelog.txt"
70 task :publish_changelog do
71 on roles(:web) do
72 log = "#{deploy_to}/current/public/changelog.txt"
73 execute "echo '============ Last deployed on' `date` ============\n > #{log}"
74 execute "echo >> #{log}"
75 execute "cd #{deploy_to}/current && git log --since=\"10 days ago\" >> #{log}"
76 end
77 end
我明白,这是一个特定的任务只是我的应用程序,但我有问题是因为在我部署我的应用程序后,Capistrano删除位于服务器角色(:web)上的应用程序中的.git目录。
上面的命令只有在角色(:web)下的应用程序是git存储库时才起作用。实质上,这意味着我必须ssh进入Web服务器,删除以前是git存储库的应用程序“current”,然后再次克隆它。一旦完成,运行上述Capistrano任务即可运行。为什么?我肯定错过了什么。
这是我推断出来的。当我部署一个Capistrano应用程序时,Capistrano必须用git目录替换我的“当前”并粘贴一个新的,有效地删除.git目录。虽然Capistrano创建了一个共享目录和释放目录,但它必须粘贴我目前的目录。这是什么Capistrano呢?一个导致继续下去,将不胜感激。我试图决定命令是否需要重写,或者如果我需要以某种方式配置Capistrano。谢谢。
感谢在@Bruno!顺便说一下,你怎么知道repo_path是一个命名路径,并且:git和:log是象语法一样的符号。我一直很难找到一个可靠的参考。 – 2014-09-01 01:28:26
我一直在使用capistrano很多,并阅读它的源代码。源代码非常精美 - 有几乎所有你可能需要的路径方法。检查他们[在这个文件中](https://github.com/capistrano/capistrano/blob/master/lib/capistrano/dsl/paths.rb)。对于命令的符号式语法,请查看[sshkit](https://github.com/capistrano/sshkit)gem - capistrano使用它! – 2014-09-01 13:25:50