Capistrano目标路径已存在,而不是空目录

时间:2014-06-19 19:40:17

标签: ruby-on-rails capistrano capistrano3

在Ubuntu 14.04上使用Capistrano部署Rails应用程序时,我收到以下错误:

fatal: destination path '/var/www/APP-NAME/repo' already exists and is not an empty directory.


cf5a389e] Running /usr/bin/env [ -f /var/www/rd/repo/HEAD ] on LINODE-INSTANCE-IP
DEBUG[cf5a389e] Command: [ -f /var/www/rd/repo/HEAD ]
DEBUG[cf5a389e] Finished in 0.005 seconds with exit status 1 (failed).
DEBUG[8899b95c] Running /usr/bin/env if test ! -d /var/www/rd; then echo "Directory does not exist '/var/www/rd'" 1>&2; false; fi on LINODE-INSTANCE-IP
DEBUG[8899b95c] Command: if test ! -d /var/www/rd; then echo "Directory does not exist '/var/www/rd'" 1>&2; false; fi
DEBUG[8899b95c] Finished in 0.005 seconds with exit status 0 (successful).
INFO[fc5f524b] Running /usr/bin/env git clone --mirror GIT_REPO_URL /var/www/APP-NAME/repo on LINODE-INSTANCE-IP
DEBUG[fc5f524b] Command: cd /var/www/APP-NAME && ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/rd/git-ssh.sh /usr/bin/env git clone --mirror GIT-REPO-URL /var/www/APP-NAME/repo )
DEBUG[fc5f524b] fatal: destination path '/var/www/APP-NAME/repo' already exists and is not an empty directory.

以下是配置文件:

我可以在线找到此错误的only reason;

  

同一主持人担任多个角色,以便他们参加比赛?例如,我的意思是您可能不止一次将相同的IP地址定义为:app角色主机。

我猜这不适合上面的配置文件。

2 个答案:

答案 0 :(得分:12)

我遇到了同样的问题。原因在于角色和/或服务器的双重定义。 尝试删除

server 'SERVER-IP', user: 'USERNAME', roles: %w{app}

在production.rb和

role :app, "SERVER-IP"
在deploy.rb中

。后者似乎只是简单的语法,而前者 - 是扩展的一个,所以你实际上你声明了两次角色(三次更精确:在production.rb中为2,在deploy.rb中为1)。希望它有所帮助。

答案 1 :(得分:0)

相关说明,在我的一个部署中更改数据库连接文件设置时遇到了这个问题。

在这种情况下,旧结构有一个共享的数据库设置文件,而新结构有两个共享文件。即使在配方中声明了这些内容,但在自动删除旧版本时仍会出错。

为解决此问题,我只是删除了较早的版本,并运行了cap [server name] deploy几次以清除它,并确认不再发生这种情况。到目前为止,还好。