【问题标题】:Capistrano: Problem with permissions on deployCapistrano:部署权限问题
【发布时间】:2010-11-13 16:37:55
【问题描述】:

我在将 Rails 应用程序部署到我的服务器时遇到问题。执行一个

cap deploy

我收到很多错误,指出 chmod 无法更改(且仅)git 对象文件的权限:

...
 ** [out :: ██████████████] chmod: changing permissions of `/srv/www/kunsthof/releases/20101113162736/.git/objects/04/779c6d894bbea4c26d6e035f71cd1ab124cc90': Operation not permitted
...
failed: "sh -c 'chmod -R g+w /srv/www/kunsthof/releases/20101113162736'" on ██████████████

文件放在部署本身上,因此部署用户应该可以更改他们的权限。关于这里可能出现的问题有什么建议吗?

【问题讨论】:

  • 那么在那个错误之后会出现很多 chmod 无法触及目标文件的错误?您能否继续并过于小心,并发布目标文件的所有者/组/权限以及 chmod 成功的文件?
  • Capistrano 立即回滚部署,因此部署目标之后为空。有没有办法防止 Capistrano 在失败后自动清理?
  • 执行 Capistrano 执行的命令后,我看到 chmod 抱怨的文件归 git 用户所有,而所有其他文件归 deploy 用户所有。
  • 好吧,这就是你的问题。部署用户是克隆 repo 的用户,还是 repo 停留在那里并被拉入?无论如何,为什么它需要所有内容都是可组写的?我不使用 capistrano,因此很难提供具体帮助 - 但不知何故,您需要阻止它尝试 chmod 那些文件,或者让它有可能做到这一点。
  • 您对 capistrano 使用什么策略,这些文件可能是在单独目录中检出的文件的副本(通常是共享/缓存...-不确定确切名称)-然后是缓存中的那些文件可以有不同的权利

标签: ruby-on-rails git deployment capistrano


【解决方案1】:

如果您使用缓存副本,通常在部署时,您的 repo 将被克隆到共享目录,并将被同步/复制到当前发布目录。在应对时,您应该使用以下变量排除 .git 目录和其他不必要的目录,例如 spec / test(不会在生产中使用):

set :copy_exclude, [".git", "spec"]

有了这个,你就不会复制 .git 目录,也不应该面临在那里执行 chmod 的权限问题。

【讨论】:

  • +epic。我写了一个部署后清理脚本来处理这个问题。有时,大脑思考的速度比文档的导航速度还要快。
猜你喜欢
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2014-01-03
  • 1970-01-01
  • 2014-07-07
  • 2014-05-30
相关资源
最近更新 更多