我與下的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