我们正在 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
我们需要在 Web 服务器上分配什么样的附加权限,以及这些权限需要分配给哪个子目录?
答案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