首页 > 解决方案 > 如何将我的代码库恢复到我最近的部署?

问题描述

我有以下情况。

12 月 6 日,我和我的团队将我们的代码库部署到生产环境中。从那时起,我们进行了一些更改,这些更改以我们没有预见到的方式破坏了代码库。该代码库是一个旧的遗留代码库,几乎没有任何测试、覆盖、大量代码异味和非常紧密耦合的模型。尽管我们尽最大努力在零碎的重构和测试中尽我们所能,但该应用程序还是坏了,现在我们很难确定如何修复该应用程序。我们的开发实践不提倡持续部署,并且每月部署大量代码(我们正在努力)。我们没有压力,但我们很难找到一个像以前一样工作的提交。

我的问题是,是否有办法让当前正在生产的代码库保持原样,并将其作为我们的起点。例如,我们使用 capistrano 通过 git 将代码库部署到 EC2 上。git、AWS EC2 或 Capistrano 是否可以让我们简单地从那里获取代码并简单地使用它来重置我们的 git 代码?

这听起来并不容易,但我认为也许有人知道如何做到这一点。有没有人知道a)的方法。获取生产代码 b)。使用该代码副本作为参考,将我们的开发代码返回到该点。

感谢您的帮助。

标签: ruby-on-railsgitamazon-web-servicescapistrano

解决方案


你至少有两个选择。首先是使用 capistrano。按照此处的步骤,您可以设置以下 capistrano 脚本:

namespace :deploy do
  desc 'Show deployed revision'
  task :revision do
    on roles :app do |host|
      within current_path do
        info "#{host}: #{capture :cat, 'REVISION'}"
      end
    end
  end
end

这将允许您调用capistrano production deploy:revision. 这将输出如下内容:

$ cap production deploy:revision
00:00 deploy:revision
      app01.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
      app02.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
      app03.example.com: cf8734ece3938fc67262ad5e0d4336f820689307

有你的提交哈希,cf8734ece3938fc67262ad5e0d4336f820689307. 然后,您可以git checkout d231b7abd6e4183e037817780738c54f1fbaf1fa将其带到您想要的确切提交。现在用

git checkout -b 'last_deployed_code'
git push origin last_deployed_code`

或@RomainValeri 评论说:

git branch recovery origin/cf8734ece3938fc67262ad5e0d4336f820689307

您现在在 github 上有了一个新分支,其中包含您想要的确切代码。

您的第二个选项有点丑陋,但同样有效。假设您对 scp 感到满意(如果您不满意,请在此处阅读更多内容- 这真的很简单),通过 SSH 连接到您的服务器,导航到您的“app”目录,然后将整个目录复制到您的本地计算机。

然后,您可以创建一个新分支或简单地强制推送到 master,嘿,您在 github 上有一个分支,它完全反映了您部署的代码。第一个选项绝对是首选,因为可能有一些您实际上不想从 prod 应用程序目录复制的配置文件


推荐阅读