我正在通过
cap staging deploy
运行第一次部署到机器。从 Cap3 开始,不再需要 deploy:setup
。然而,奇怪的是,我收到 mkdir 权限错误:
INFO[cb348f12] Running /usr/bin/env mkdir -pv /var/www/myapp/shared /var/www/myapp/releases on ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com
DEBUG[cb348f12] Command: /usr/bin/env mkdir -pv /var/www/myapp/shared /var/www/myapp/releases
DEBUG[cb348f12] mkdir:
DEBUG[cb348f12] cannot create directory ‘/var/www’
DEBUG[cb348f12] : Permission denied
DEBUG[cb348f12]
DEBUG[cb348f12] mkdir:
DEBUG[cb348f12] cannot create directory ‘/var/www’
DEBUG[cb348f12] : Permission denied
DEBUG[cb348f12]
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com: mkdir exit status: 1
当然,我可以自己创建并修改该目录,但这不是重点。 Cap3 应该自己解决这个问题。我很困惑为什么它不这样做。我还应该注意到,我之前在另一台机器上成功进行了相同的设置(尽管那是“生产”环境)。
以下是我的deploy.rb中的一些基本设置:
set :application, "myapp"
set :user, 'ec2-user'
而不是创建以下目录结构:
/var/www/myapp/shared/var/www/myapp/releases
尝试:/var/www/myapp/releases
编辑:重新阅读您的问题,我发现您已经知道如何在服务器上创建文件夹并设置权限。
Cap3 应该自己处理这个问题。我很困惑为什么会这样 不这样做
不。如果提供给 Cap3 的用户没有创建文件夹的权限,Cap3 无法自动在服务器上创建文件夹。这里没有什么魔法,只是 unix 权限。
在您的情况下,您提供的用户
ec2-user
无权在/var
中创建文件夹,这会导致错误。
原答案
检查您的服务器上是否存在
/var/www
文件夹。如果没有,则创建该文件夹并将其所有权设置为 ec2-user
,以便 Capistrano 可以在部署期间根据需要创建任何其他文件夹。
sudo mkdir -p /var/www
sudo chown ec2-user:ec2-user /var/www
运行上述命令后,尝试使用 capistrano 再次部署。权限错误现在应该消失了。