在 Capistrano 3 中创建 linked_dirs 失败

Creating linked_dirs in Capistrano 3 fails

我正在尝试使用 SilverStripe 构建设置 Capistrano,但 运行 在设置共享目录时遇到了一些麻烦。

我在 deploy.rb 中设置 linked_dirs 如下:

set :linked_dirs, %w{assets vendor}

添加此行后出现以下错误:

[617afa7f] Command: /usr/bin/env mkdir -p /var/www/website/releases/20160215083713 /var/www/website/releases/20160215083713
INFO [617afa7f] Finished in 0.250 seconds with exit status 0 (successful).
DEBUG [88c3de20] Running /usr/bin/env [ -L /var/www/website/releases/20160215083713/assets ] as capistrano@128.199.231.152
DEBUG [88c3de20] Command: [ -L /var/www/website/releases/20160215083713/assets ]
DEBUG [88c3de20] Finished in 0.258 seconds with exit status 1 (failed).
DEBUG [3d61c1c4] Running /usr/bin/env [ -d /var/www/website/releases/20160215083713/assets ] as capistrano@128.199.231.152
DEBUG [3d61c1c4] Command: [ -d /var/www/website/releases/20160215083713/assets ]
DEBUG [3d61c1c4] Finished in 0.254 seconds with exit status 1 (failed).
INFO [3016a8cd] Running /usr/bin/env ln -s /var/www/website/shared/assets /var/www/website/releases/20160215083713/assets as capistrano@128.199.231.152

在 Capistrano 方面我是一个超级菜鸟,在服务器配置和权限方面我是一个半菜鸟,所以任何指点都将不胜感激。

它可能实际上并没有失败。关于 Capistrano 需要了解的一件事是 (success)(failed) 实际上是 returning exit status 的结果,(success) if 0 和 (failed)如果非 0.

如果我们查看有问题的命令,它会显示 /usr/bin/env [ -L /var/www/website/releases/20160215083713/assets ] 失败。这个命令说“return 0 如果 /var/www/website/releases/20160215083713/assets 存在并且是一个 link (-L)。这失败了,但这只是意味着它 return 是非0,因此需要创建 link。请注意,下一个命令也失败了 (-d),断言路径是一个目录。输出中的最后一行实际上是在创建 link 有问题。

您可以在此处查看 Capistrano 代码库中的测试:https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/deploy.rake#L128

您可以使用 https://github.com/mattbrictson/airbrussh 清理和简化输出。这是由一位主要的 Capistrano 开发人员开发的。

作为旁注,类似地,您终端中的所有绿色文本都是 stdout,红色文本是 stderr。这也可能令人困惑。