Capistrano 3 中的首次部署失败,并出现 /var/www/XXX 权限错误

问题描述 投票:0回答:2

我正在通过

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'
capistrano capistrano3
2个回答
0
投票

而不是创建以下目录结构:

/var/www/myapp/shared/var/www/myapp/releases
尝试:
/var/www/myapp/releases


0
投票

编辑:重新阅读您的问题,我发现您已经知道如何在服务器上创建文件夹并设置权限。

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 再次部署。权限错误现在应该消失了。

© www.soinside.com 2019 - 2024. All rights reserved.