无法删除 Opsworks deploy 创建的 rails/system 符号链接

Posted

技术标签:

【中文标题】无法删除 Opsworks deploy 创建的 rails/system 符号链接【英文标题】:Unable to remove rails/system symlink created by Opsworks deploy 【发布时间】:2014-04-14 12:06:26 【问题描述】:

我想让新实例使用 S3 存储桶来上传文件/图像。我正在使用 s3fs 并且目标文件夹安装在实例上。我想:

1- 删除 /srv/www/myapp/current/public/system(当前指向 shared/public/system)

2- 将 /srv/www/myapp/current/public/system 链接到 /s3mounted/bucket/public/system

所以所有实例都指向同一个共享且永久的 s3 位置。

链接归 www-data 所有,我尝试手动 sudo su 和 rm 并没有工作。我的问题是,如果我要在厨师食谱中作为部署挂钩 (before_restart.rb) 执行此操作,我怎样才能删除此链接,以便我可以指向不同的位置。

【问题讨论】:

【参考方案1】:

在您当前的 before_restart.rb 中执行以下操作:

current_release = release_path
deploy_node = node

deploy_resource = new_resource
deploy_to = deploy_resource.deploy_to
app_name = deploy_to.split('/')[-1]

deploy_user = deploy_node[:deploy][app_name][:user]
deploy_group = deploy_node[:deploy][app_name][:group]

link "#current_release/public/system" do
  to "/s3mounted/bucket/public/system"
  owner deploy_user
  group deploy_group
end

第一部分设置我使用的变量。如果你使用 deploy[] 之类的东西,你最终可以让机器进入部署循环。

这实际上是为您删除文件。当您符号链接时,它会自动为您删除。

【讨论】:

【参考方案2】:

Apache 进程已锁定文件/文件夹。这不是权限问题。我不得不停止 apache,然后“sudo rm”然后我能够链接到新位置并重新启动 apache,一切正常。

这可能不是最好的解决方案,并且很想听听其他关于如何做到这一点的想法。

【讨论】:

以上是关于无法删除 Opsworks deploy 创建的 rails/system 符号链接的主要内容,如果未能解决你的问题,请参考以下文章

AWS opsworks deploy 在实例加入域后永远运行

Opsworks 厨师 12 道菜谱

为多个应用程序设置个性化的 Opsworks Deployment 配方

Chef 失败了我的资产:Opsworks 上的预编译步骤

每当 aws opsworks 上的 gem

Opsworks 安装作曲家错误