【问题标题】:Capistrano error when change repository using git使用 git 更改存储库时出现 Capistrano 错误
【发布时间】:2013-05-21 19:30:33
【问题描述】:

我从 Git 存储库通过 capistrano 进行了简单的部署。

我想更改我正在使用的存储库,所以我基本上只是更改了

set :repository, "git@github.com:new_repository"

但我在部署时收到以下错误:

致命:无法解析对象 '9cfb...'。

一旦我改变,问题就消失了

设置:deploy_via, :remote_cache

设置:deploy_via, :copy

我也尝试过 deploy:cleanup,但出现以下错误:

*`deploy:cleanup' 仅针对匹配 {:except=>{:no_release=>true}} 的服务器运行,但没有匹配的服务器*

知道如何让 remote_cache 再次工作吗?

谢谢!

【问题讨论】:

标签: ruby-on-rails-3 capistrano


【解决方案1】:

与此thread 相关,在更新您的deploy.rb 后,

set :repository, "git@github.com:new_repository"

使用 ssh deploy-user 访问您的服务器,然后使用cd Old_repository/reposudo vim config

你会找到这条线 url = git@github.com:username/old_repository.git,你必须用url = git@github.com:username/new_repository.git重命名它

不要忘记删除服务器上的 Old_repository 文件夹,或者只是在 New_repository 文件夹中重命名它!

【讨论】:

    【解决方案2】:

    只需将任务添加到 deploy.rb 即可自动同步。

    $ cap admin:fix_repo

      namespace :admin do
        desc 'Fix repo'
        task :fix_repo, :roles => :web do
          run "cd #{shared_path}/cached-copy && git remote set-url origin #{repository}"
        end
      end
    

    【讨论】:

      【解决方案3】:

      使用 capistrano 3,避免删除 repo 文件夹:

      1. 更改您的config/deploy.rb 中的 repo URL,就像 OP 已经做的那样

      2. SSH 到你的服务器内部并更改 git repo 的远程 URL:

        ssh user@server.com  
        # Go the capistrano deploy root
        cd /capistrano/deploy/root/folder  
        # Go inside the folder names *repo*
        cd repo  
        # Manually change the git remote
        git remote set-url origin ...
        

      【讨论】:

        【解决方案4】:

        Capistrano 3 用户的附加信息。 Capistrano 将创建一个文件夹repo。所以结构看起来是这样的:

        current -> /var/www/preview/releases/20140612212305
        releases
        repo
        revisions.log
        shared
        

        当您更改deploy.rb 中的:repo_url 时,您可以安全地删除repo 文件夹并运行部署。将再次创建该文件夹。您必须执行此步骤的原因是因为在 repo/config 中是旧的远程 url。

        【讨论】:

        • 为我工作(删除 repo 文件夹)
        【解决方案5】:

        Capistrano

        在您服务器的部署文件夹中的 ./shared/cached-copy/.git/config 中修复它。

        或丑陋的方式这样做:

        从您服务器的部署文件夹中删除 shared/cached-copy

        Capistrano > 3

        在您服务器的部署文件夹中的 ./repo/config 中修复它。

        了解如何解决类似问题

        这是因为您的服务器文件引用了旧的 repo,因此您必须找到并修复它。 这样做可以在文件中查找匹配项:

        cd /path/to/your/project
        grep -r OLD_REPO_NAME ./
        

        现在您可以看到所有文件,包括您的 OLD_REPO_NAME 。 如果它们在您的发布文件夹或当前文件夹中匹配,则您无需关心修复它们。但是你应该修复所有配置。

        【讨论】:

          【解决方案6】:

          你可以在里面更改 git url

          shared/cached-copy/.git/config
          

          【讨论】:

            【解决方案7】:

            ssh 到您的生产服务器并删除您的共享/缓存文件夹的内容。存储在其中的 git ref 不再有效,因此无法正常工作。

            【讨论】:

            • 嗨,马修。我删除了 shared/cached-copy 中的所有内容并得到了同样的错误,然后我删除了它并得到了这个错误:ERROR: Repository not found
            • 是的,您肯定需要该文件夹。它通常对我有用。我总是以同样的方式解决这个问题。让我看看
            • 谢谢!我一直在努力解决这个问题,但没有任何结果。
            • 这些不适用于 Capistrano 3,请更改 repo/config 文件中的 url。共享/缓存文件夹不存在
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-29
            • 1970-01-01
            • 2017-07-31
            相关资源
            最近更新 更多