【问题标题】:capistrano deploy_symlink failscapistrano deploy_symlink 失败
【发布时间】:2010-09-29 21:16:20
【问题描述】:

这是我的第一次部署。我做了一个帽子deploy:setup,效果很好。

然后,当我尝试执行 cap deploy:update 时,我遇到了错误消息。类似于

rm: cannot remove `/var/www/app_name/current': Is a directory

这是我的 capfile 和目录权限。

http://pastie.org/1189919

一般来说,就部署用户和权限而言,最佳做法是什么?我应该使用 root 还是创建一个不同的用户。如果是不同的用户,它需要什么确切的权限?

谢谢

【问题讨论】:

    标签: ruby-on-rails capistrano


    【解决方案1】:

    您是在 /var/www/app_name 中创建目录,还是由 capistrano 创建的?

    无论如何,您遇到的问题是 /var/www/app_name/current 不应该是目录 - 它应该是 /var/www/app_name/releases/ 中当前版本的符号链接。失败是由于 capistrano 已在 /var/www/app_name/releases/ 中创建新的发布文件夹,并尝试将 /var/www/app_name/current 符号链接到它。

    您可以通过重命名 /var/www/app_name/current(以便在出现问题时进行备份)并创建从 /var/www/app_name/current/var/www/app_name/releases/ 中的最新版本的符号链接来解决您的问题,然后执行cap deploy。 (如果可行,请删除当前的备份)。

    就最佳实践而言,无论您做什么,不要使用 root。相反,设置一个仅对所需目录具有权限的用户(或使用现有用户)(没有仔细阅读您的脚本,但可能只是 /var/www/app_name

    【讨论】:

    • @badnaam:你为什么把这个标记为答案,然后又去掉了答案标记?不准确吗?如果我遗漏了什么,请发表评论并告诉我。
    【解决方案2】:

    要部署新版本,您应该调用 cap deploycap deploy:migrations,而不是 cap deploy:update

    【讨论】:

      【解决方案3】:

      我也遇到过这样的错误。更新源代码和重新启动服务器这一完全正常的任务似乎总是在简单脚本的各个点出现问题。

      有时它会抱怨 github 上的哈希值与某些预期值不匹配,有时它不会更新目录,因为它已经存在,但主要是因为它想要创建存在的东西。

      有没有办法强制 Capistrano 和 shell 命令只做它?如果它遇到这种类型的错误而不是仅仅失败并回滚,我至少会很感激它问我应该怎么做。特别是当它是一个简单的文件操作时。

      我最终不得不在服务器上手动删除一些东西,这样 Capistrano 脚本才能运行而不会失败。这显然不是前进的方向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        相关资源
        最近更新 更多