2010-09-29 97 views
3

這是我第一次部署。我做了一個帽子deploy:setup,它工作得很好。capistrano deploy_symlink失敗

然後,當我嘗試執行cap deploy:update時,我遇到了錯誤消息。東西沿線

rm: cannot remove `/var/www/app_name/current': Is a directory 

這是我的capfile和目錄權限。

http://pastie.org/1189919

一般來說,什麼是最好的做法,只要部署用戶和權限都在關注?我應該使用root還是創建一個不同的用戶。如果不同的用戶需要什麼確切的權限?

感謝

回答

6

您是否在/var/www/app_name內創建了目錄,還是由capistrano創建?

無論如何,你的問題是/var/www/app_name/current不應該是一個目錄 - 它應該是在/var/www/app_name/releases/當前版本的符號鏈接。當capistrano完成在/var/www/app_name/releases/內創建新版本文件夾並正在嘗試將/var/www/app_name/current符號鏈接到該文件夾​​時,會導致失敗。

您可能能夠通過重命名/var/www/app_name/current解決您的問題,(讓你有一個備份,如果出了問題),並在/var/www/app_name/releases/創建從/var/www/app_name/current一個符號鏈接到最新的版本,然後做一個cap deploy。 (刪除你的當前備份,如果這個工程)。

就最佳實踐而言,無論你做什麼,都不使用根。相反,設置一個只對所需目錄具有權限的用戶(或使用現有用戶)(沒有仔細閱讀你的腳本,但可能只是/var/www/app_name

+0

@badnaam:你爲什麼把這個標記爲答案,然後再刪除答案標記?它不準確嗎?如果有什麼我錯過了,留下評論並讓我知道。 – SamStephens 2010-09-30 00:38:57

0

要部署一個新的版本,你應該調用cap deploycap deploy:migrations,不cap deploy:update

0

我也有過這樣的錯誤。更新源代碼並重新啓動服務器似乎總是在簡單腳本的各個位置出現問題

有時它會抱怨github上的哈希值與某個期望值不匹配,有時它不會更新目錄因爲它已經存在,但主要是它想要創造存在的東西。

難道沒有辦法強制Capistrano,因此shell命令是ju st DO IT?我至少會感激它問我,如果遇到這種類型的錯誤,而不是失敗並回滾,應該怎麼做。特別是當它是一個簡單的文件操作。

我最終不得不在服務器上手動刪除東西,以便Capistrano腳本運行時不會失敗。這顯然不是前進的方向。