gpt4 book ai didi

linux - 与 :linked_dirs 一起使用时,使用 Amazon EFS(绑定(bind)安装文件夹)的 Capistrano 部署失败

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:34 25 4
gpt4 key购买 nike

我在尝试使用 Capistrano 部署需要在部署(当前)文件夹内安装多个 Amazon EFS 绑定(bind)的应用程序时遇到问题。

我在 Web 服务器的根目录中有一个名为 /webroot 的目录,其中包含我们当前所有的代码以及在三个节点之间共享的大约 7 个文件夹(绑定(bind)装载)。

在我的 deploy.rb 中,我有以下行 set :deploy_to, "/webroot/testingCap" 其中 Capistrano 将代码部署到符号链接(symbolic link)文件夹 当前。这很好,但是现在当它进入符号链接(symbolic link)绑定(bind)安装目录的步骤时,例如:/webroot/uploads 它会抛出一个错误:

rm -rf/webroot/uploads
rm: 无法删除 '/webroot/uploads'
设备或资源繁忙

我不确定它为什么要强行删除该目录?我认为它应该只是指向目录的符号链接(symbolic link)。

我的 linked_dirs 部分在 deploy.rb 中看起来像这样:附加:linked_dirs,“/webroot/uploads”

我做错了什么?

最佳答案

:linked_dirs 仅适用于相对路径 并且始终使用 Capistrano 的共享 目录。

当您添加例如"foo":linked_dirs,Capistrano 将在您部署的应用程序中创建一个符号链接(symbolic link)。如果那里已经存在任何内容,它将首先删除它(这就是为什么您会看到 rm -rf)。

该链接的目的地将始终指向 Capistrano 的 shared 目录中的相同名称。所以事件链将是这样的:

rm -rf /webroot/testingCap/current/foo
ln -s /webroot/testingCap/shared/foo /webroot/testingCap/current/foo

因此,如果您查看 current 内部,您将得到一个指向的链接

foo -> /webroot/testingCap/shared/foo

请注意,相对于 current 的路径与相对于 shared 的路径相同。这就是 :linked_dirs 的工作方式,您无法更改它。

例如,如果您的应用希望将上传内容存储在 public/uploads 中,您需要在 shared 中存在完全相同的相对路径,以便链接到成立。换句话说,链接将指向:

/webroot/testingCap/current/public/uploads -> /webroot/testingCap/shared/public/uploads

在你的情况下,我怀疑你可以让它工作,但你需要确保你的挂载点正好位于 Capistrano 期望的位置。

关于linux - 与 :linked_dirs 一起使用时,使用 Amazon EFS(绑定(bind)安装文件夹)的 Capistrano 部署失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com