我觉得有必要在这里回答以澄清关于 current_path 和 release_path
的一些事情
Capistrano 分阶段工作,因此为了回答这个问题,我将描述以下重要阶段。
第 1 阶段:在 current_dir 重新链接之前
在我正在查看的 Capistrano 版本中,“当前”目录的“链接”发生在任务中
deploy:create_symlink
但是您应该检查您的 capistrano 设置以获取确切的任务名称。在 capistrano 终端输出中很容易看到,只需查找对“ln -s”的 sshkit 调用。
在此步骤运行之前:
-
current_dir 是符号链接的路径,指向由 capistrano 的最后 [非当前] 运行创建的 last 目录。 不是真的是最新的吗?或者不会很长时间......
-
release_dir 是在此次 capistrano 运行中创建的最新签出版本。
所以要特别注意,在这个阶段在 current_dir 中工作的任何东西都在在错误的地方工作。
第 2 阶段:current_dir 重新链接后
AFTER 符号链接步骤运行 [它将在 release_dir 上运行“ln -s”,链接到 current_dir(它并不是真正的目录,它是一个链接。无论如何.....)]
-
current_dir 是符号链接的路径,指向 release_dir。现在它确实是最新的。
-
release_dir 是在此次 capistrano 运行中创建的最新签出版本。
在这个阶段,您的任务是在 release_dir 还是 current_dir 中工作不再重要,它们指向的是磁盘上的“相同”文件。 p>
为什么这很重要?
在符号链接更改之前工作通常更可取,因为如果出现故障,不会造成任何中断。在这个阶段,您必须使用 release_dir。
如果您在符号链接更改后工作,您仍然可以使用 release_dir。如果您使用 current_dir,问问自己为什么不使用 release_dir,
并问自己为什么在符号链接更改之后运行这些构建步骤。如果您可以在符号链接更改之前移动它们,那么您应该这样做。在
我正在查看的设置,我这样做了
before "deploy:create_symlink", "a_task_that_must_use_release_dir"
如果您在符号链接更改后、网络服务器重新启动之前在 current_dir 中工作,并且遇到问题,则您可能已经破坏了您的环境。
这会使 current_dir 变得邪恶吗?我不这么认为,权力越大,责任越大。