【问题标题】:Capistrano deployment with Amazon EFS (bind mounted folders) failing when using with :linked_dirs与 :linked_dirs 一起使用时,使用 Amazon EFS(绑定挂载文件夹)的 Capistrano 部署失败
【发布时间】:2018-02-11 04:07:09
【问题描述】:

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

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

在我的deploy.rb 内部,我有以下行set :deploy_to, "/webroot/testingCap",Capistrano 在其中将代码部署到符号链接文件夹current。这很好,但是现在当它进入符号链接绑定挂载目录的步骤时,例如:/webroot/uploads 它会引发错误:

rm -rf /webroot/uploads rm: cannot remove '/webroot/uploads' Device or resource busy

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

我的linked_dirs 部分在deploy.rb 内部看起来像这样: append :linked_dirs, "/webroot/uploads"

我做错了什么?

【问题讨论】:

    标签: linux amazon-web-services capistrano capistrano3


    【解决方案1】:

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

    当您添加例如"foo":linked_dirs,Capistrano 将在您部署的应用程序中创建一个符号链接。如果那里已经存在任何内容,它将首先将其删除(这就是您看到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 期望的位置。

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2020-10-27
      • 2013-03-27
      • 1970-01-01
      相关资源
      最近更新 更多