ruby-on-rails - 如何将我的代码库恢复到我最近的部署?
问题描述
我有以下情况。
12 月 6 日,我和我的团队将我们的代码库部署到生产环境中。从那时起,我们进行了一些更改,这些更改以我们没有预见到的方式破坏了代码库。该代码库是一个旧的遗留代码库,几乎没有任何测试、覆盖、大量代码异味和非常紧密耦合的模型。尽管我们尽最大努力在零碎的重构和测试中尽我们所能,但该应用程序还是坏了,现在我们很难确定如何修复该应用程序。我们的开发实践不提倡持续部署,并且每月部署大量代码(我们正在努力)。我们没有压力,但我们很难找到一个像以前一样工作的提交。
我的问题是,是否有办法让当前正在生产的代码库保持原样,并将其作为我们的起点。例如,我们使用 capistrano 通过 git 将代码库部署到 EC2 上。git、AWS EC2 或 Capistrano 是否可以让我们简单地从那里获取代码并简单地使用它来重置我们的 git 代码?
这听起来并不容易,但我认为也许有人知道如何做到这一点。有没有人知道a)的方法。获取生产代码 b)。使用该代码副本作为参考,将我们的开发代码返回到该点。
感谢您的帮助。
解决方案
你至少有两个选择。首先是使用 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 应用程序目录复制的配置文件
推荐阅读
- html - Angular ngModel 未绑定到数据
- sass - Sass:将共享类应用于内容块中的每个选择器
- r - 如何删除列表中的字符串列表
- python-3.x - 删除角色 id 是成员 id discord py
- ethereum - 无法将带有 web3js 的客户端应用程序连接到元掩码
- excel - QueryTables.Add 1004 问题用于从网络中提取
- gml - How to get access to the instance variable within the Create event?
- javascript - 如何将用户输入参数传递给我的云函数?
- list - Quick-Dict 或 Hash-List :键值和键值?
- ansible - 如何在 when 条件下使用变量替换?