我們正在 ubuntu 10.04 伺服器上部署 Rails 應用程式。當 cap deploy:setup 時,出現錯誤:
* executing "mkdir -p /vol/www/myapp /vol/www/myapp/releases /vol/www/myapp/shared /vol/www/myapp/shared/system /vol/www/myapp/shared/log /vol/www/myapp/sha
red/pids"
servers: ["11.15.69.45"]
Password:
[11.15.69.245] executing command
*** [err :: 11.15.69.45] mkdir: cannot create directory `/vol/www/myapp/releases'
ls -ld /vol/www 的輸出是:
drwxr-xr-x 3 root root 4096 2011-11-22 04:35 /vol/www
我們需要在網頁伺服器上分配什麼樣的附加權限以及這些權限需要分配到哪個子目錄?
答案1
這裡似乎對您的問題有些困惑。 Andrew 的回答解決了這個問題,“Web 伺服器是否有適當的權限來直接寫入您要部署到的伺服器?”
然而,您實際上在早期階段遇到了問題:將程式碼部署到伺服器。在這個階段,是否網路伺服器可以寫入/vol/www,但是否您連線的用戶當您部署程式碼時,程式碼具有寫入該目錄的權限。
安德魯的解決方案基本上仍然適用,但略有不同。
我推薦以下方法之一:
由於您已經設定
/vol/www
為群組可寫www-data
,因此您只需將使用者新增至該群組即可:sudo usermod -aG www-data your-username
或者,您可以讓自己成為所有者並以這種方式授予自己存取權限。由於您已經為 Web 伺服器設定了群組存取權限,因此變更目錄的擁有者不會導致出現問題。
sudo chown your-username /vol/www
這些選項中的任何一個都應該為您的使用者提供部署程式碼的正確存取權限,並保留 Web 伺服器對該目錄的存取權限。
答案2
Ubuntu 中的 Web 伺服器使用者是 www-data(除非您使用 mod_suexec 執行)。因此 www-data 需要 /vol/www 的寫入權限。一種方法是讓 www-data 成為所有者:
chown www-data /vol/www
或者您可以使用群組所有權和權限:
chgrp www-data /vol/www
chmod g+w /vol/www
第三種方法是使用 ACL:
setfacl -m u:www-data:rwx /vol/www
getfacl /vol/www # to see the ACL grant