将Rails应用程序放在公共git中,将私有详细信息保密

时间:2012-02-16 20:30:37

标签: ruby-on-rails git github

我有一个Rails应用程序,它确实不是真正的“可共享”应用程序,但我仍然希望将它放在公共git(hub)仓库中。为什么?好吧,主要是因为我实际上想与在我的领域工作的其他感兴趣的人分享代码。一个免费的github回购没有受到伤害,但如果我实际上也不想分享代码,我肯定会为此付出代价。

基本情境

所以问题是将'私人'细节保留在git repo之外。什么是私人细节?好吧,Rails在隔离它们方面做得很好。有时它们是单独的文件,例如./config/database.yml,或其他一些特定于应用程序(不是默认的Rails)./config/x文件。在其他情况下,可能遗憾的是在其他期望可共享的文件中有单行,但不确定。

我现在要求的是 NOT 实际上有助于找到Rails3应用中所有“私有”的地方。不,这只是基本问题的一些背景。

管理私人内容的简单方法

我实际要求的是建议使用机制将私有内容保存在“其他地方”并将其合并到从公共git仓库检出的应用程序中。

我知道基本的想法是“好吧,把它们留在别的地方,你的选择,然后把它们复制进来。”但是,是的,在哪里? (另一个私人git repo?共享文件系统?),以及如何管理'复制'? ruby / rails人们喜欢自动化事物并自动化最佳实践,我认为必须有一个工具,或者至少有人对最佳实践有一些建议?

我想要什么

  • 需要非常简单。如此简单,我可以为假设不太称职的同事留下指令,包括部署应用程序(将公共回购与私人数据相结合),以及更改/添加/提交“私人数据”。

  • 它应该涵盖“私有数据”的整个文件,理想情况下也是其他公共文件中的单行,尽管可能不是必需的,但是理想的工具/过程会做到这一点。

  • 应用程序将在多个主机上部署/检出/设置,并且应该很容易在全新主机上检查它,而无需在该主机上进行任何特殊设置。同样,使用任何主机帐户。在这种情况下,与普通的git checkout相同不是问题,对吗?

  • 快照/依赖关系管理。这是一个可能不得不牺牲的,但它会很好。私有配置有时会改变,对吧?通过普通的“单一git repo”设置,您的私有数据将与其他所有代码一起进行快照和管理。很容易看到“私有数据”配置的版本与其余代码的版本有什么关系,因为它只是自动的 - 您可以对特定快照执行git checkout,并且您可以获得所有状态代码包括该快照的私有数据。将这个功能保留在“单独位置的私有数据”计划中会很好,因此仍然可以知道私有数据的版本与git快照的确切位置....但这可能不可行。 **这个要求首先让我想到“哦,只需使用git子模块,私有git repo中的私有数据,公共git repo通过git子模块链接到它。”如果'私有数据'是一个目录(整个目录,只有那个目录),这是有效的,但我不确定Rails应用程序的情况。理想情况下, ./config的某些可以共享,私有数据可能在其他地方。但我想一个选择就是确保所有私有数据都在'config'中,并保持所有配置'私有'即使你真的不需要。不理想,如果有更好的解决方案,但我认为这是一种方法。

因此?

有什么想法吗?是否有针对此的工具?那好吗?或者,如果不是工具,方法或最佳实践的建议? (如果我能找到一种优雅而强大的杀手方式,我可能会编写一个工具来自动化它。现在,我仍然不确定'正确'的方法是什么。 )

2 个答案:

答案 0 :(得分:0)

  • 将所有'私有'一个衬里重构为config / secrets.yml中定义的常量,将所有'秘密'文件重构为config / secrets /。将它们装入焦油球并将其私下分发给您的合作者。要对这些机密进行版本控制,请将tar球的md5sum保存在版本化文件中,例如:配置/ secrets.tar.md5。编写一个rake任务,只有当md5sum与版本化的md5sum匹配时才会在你的应用上扩展tar球。
  • 您可以使用对称密钥加密每个秘密文件,然后只分发密钥,但这会将您的秘密公开(尽管是加密形式),并依赖于每个人都正确使用GPG这样的东西。
  • 在第一种情况下,使用秘密部署应用程序就像将焦油球移动到正确的位置并运行rake任务一样简单。
  • 您可以将md5sum包含在tar球的文件名中,这意味着从repo中的secrets.tar.md5版本中,您可以识别与该版本相关的特定密码tar。

答案 1 :(得分:0)

如果您需要与公众分享您的项目,我会将这些秘密分解到一个单独的GEM中,该GEM托管在bitbucket.org上,并为每个合作者提供:

  • 自己的帐户(免费最多5个)或
  • 共享用户名/密码或
  • SSH密钥

如果您不需要分享,我会对整个项目使用bitbucket.org,因为免费帐户只允许私人项目。