【问题标题】:Capistrano + Git : repository local to production serverCapistrano + Git:生产服务器的本地存储库
【发布时间】:2011-01-18 14:09:49
【问题描述】:

我正在尝试为我的应用程序执行“部署:冷”。 git repo 是本地的 我的部署服务器(即我只有一台服务器来处理所有事情,我 不要在 github 上托管我的代码)。

这是成绩单(出于隐私考虑,将我的应用名称替换为“myapp”)

  * executing `deploy:cold'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "git ls-remote /home/mrichman/git/myapp.git master"
fatal: '/home/mrichman/git/myapp.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
*** [deploy:update_code] rolling back
  * executing "rm -rf /var/www/myapp.com/releases/20100218203108; true"
    servers: ["myapp.com"]
Password:
    [myapp.com] executing command
    command finished
Command git ls-remote /home/mrichman/git/myapp.git master returned status code 32768

这是我的 deploy.rb:http://pastie.org/831424

我也试过

set :repository, "deploy@localhost:/home/mrichman/git/myapp.git"

但这给了我

ssh: connect to host localhost port 22: Connection refused

感谢任何想法。

【问题讨论】:

    标签: ruby-on-rails git deployment capistrano


    【解决方案1】:

    刚刚遇到了同样的问题。关键是不要使用 deploy_via 复制,而是设置 :local_repository

    这应该设置为您用于从开发计算机/笔记本电脑访问存储库的 URL。

    我的也是

    set :repository, "file:///srv/git/myapp.git"
    set :local_repository, "nameOfHostFromSSHConfig:/srv/git/myapp.git"
    

    似乎奏效了。请记住,然后删除 deploy_via 复制行。

    【讨论】:

    • 我现在有以下内容,但也失败了: set :repository, "file:///var/git/myapp.git" set :local_repository, "localhost:/var/git/myapp. git”在本地执行:“git ls-remote localhost:/var/git/hireexchange.git master” ssh:连接到主机 localhost 端口 22:连接被拒绝
    • 你们是在同一个盒子上开发吗?如果你是我想:local_repository,“file://var/git/myapp.git”会工作。 localhost 应替换为您从假定的远程工作站连接到的任何主机名。我还发现,如果您有子模块,在进行这样的部署时会遇到更多问题,因为模块被设置为指向远程 URL。很烦人,但可以在您部署为的用户下在您的服务器上使用 .ssh/config 解决。
    • 大家好。如果有任何区别,我的本地和远程机器上的 git 需要不同的路径,因此我需要 set :git_local /path/to/remote/git 和 set :git /usr/bin/git (注意这些不需要 ssh开始)。
    • 我使用了set :repository, "/home/#{user}/path/to/repo.git" 而不是file:///... 行,它的工作原理就像变魔术一样!谢谢
    • 在 Capistrano 3 中,将 :repository 替换为 :repo_url:local_repository 似乎没有必要,至少对我来说是这样。
    【解决方案2】:

    以您要部署到的站点的用户身份登录并尝试此操作以查看您的用户是否有权访问该目录:

    ls -la /home/mrichman/git/myapp.git

    如果您收到 Permission denied 错误,那么您必须确保在存储库的封闭目录上设置了允许部署脚本访问文件的权限。

    【讨论】:

    • 我已验证我的部署用户对 /home/mrichman/git/myapp.git 具有完全读取权限。感谢您的评论。
    • 尝试登录部署用户帐户并手动输入失败的命令:“git ls-remote /home/mrichman/git/myapp.git master”,它可能会给你同样的错误,如果是这样,请以 mrichman 用户身份登录并以该用户身份尝试。如果这仍然给出错误,我敢打赌这会发生,那么您将需要进入“/home/mrichman/git/myapp.git”目录并输入“git status”,如果失败,您需要检查该目录的内容是否确实包含 git 存储库。
    • 当我以我的部署用户或我自己的用户身份执行 git ls-remote 时,我似乎获得了成功:aa30ffc814fffd96b168ffec7224aeb9fe9df161 refs/heads/master。我相信git status 仅适用于工作树,而不适用于实际的存储库。作为一个实验,我将我的 repo 推送到 Codaset,我的 cap deploy 可以正常工作。我可以(并且可能应该)继续这种方式,因为将 SCM 保存在他们的网络服务器上是不安全的 :)
    • 我刚刚遇到了这个问题,这是因为我运行 cap deploy:update 作为 sudo。我的本地用户可以正确运行 git ls-remote 但 sudo git ls-remote 给了我同样的错误。我终于找到了一个事实,即我的本地用户拥有远程 git 存储库的正确 ssh 密钥,但 root 没有。
    【解决方案3】:

    请确保您编写了正确的 git repo 并注意区分大小写! (我遇到了同样的问题,刚刚解决了)

    【讨论】:

      【解决方案4】:

      我的问题实际上与已知主机问题有关。我所要做的就是确保远程 git 服务器在我已知的主机中(第一次尝试通过 SSH 连接到它会提示您自己添加它),它就像一个魅力。

      【讨论】:

        【解决方案5】:

        如果设置了local_repository,则Capistrano 使用来自部署服务器的respository 的值和来自开发服务器的local_respository 的值。 Or something like that.

        我的配置是这样工作的:

        set :repository, "/home/#{user}/path/to/repo.git"
        set :local_repository, "myserver.com:path/to/repo.git"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-19
          • 2014-10-18
          • 1970-01-01
          • 1970-01-01
          • 2020-08-14
          • 1970-01-01
          • 2013-11-21
          相关资源
          最近更新 更多