Ruby on rails 将Rails应用程序放在公共git中,保留私有详细信息
我有一个Rails应用程序,它并不是一个真正的“可共享”应用程序,但我仍然想把它放在一个公共git(集线器)回购中。为什么?主要是因为我真的想和我所在领域的其他感兴趣的人分享代码。免费的github回购协议不会有什么坏处,但如果我真的不想分享代码,我会付钱的,当然 基本语境 因此,问题在于将“私人”细节排除在git回购之外。什么是私人细节?Rails在隔离它们方面做得很好。有时它们是独立的文件,例如./config/database.yml,或者一些其他特定于应用程序的文件(不是默认的Rails)。/config/x文件。在其他情况下,令人遗憾的是,在其他需要共享的文件中可能只有一行,但对此并不确定 我现在要问的是不是在Rails3应用程序中帮助查找所有“私人”位置。不,这只是一些基本问题的背景 管理私人物品的简单方法 我真正想要的是建议人们使用某种机制,将私有内容保存在“其他地方”,并将其合并到一个从公共git回购中签出的应用程序中 我知道最基本的想法是“好吧,把它们放在别的地方,你自己选择,然后复制进去。”但是,是的,在哪里?(另一个私有git repo?共享文件系统?),以及如何管理“复制”?ruby/rails人们喜欢自动化事物和自动化最佳实践,我认为应该有一个工具来实现这一点,或者至少有人对最佳实践有一些建议 我想要什么Ruby on rails 将Rails应用程序放在公共git中,保留私有详细信息,ruby-on-rails,git,github,Ruby On Rails,Git,Github,我有一个Rails应用程序,它并不是一个真正的“可共享”应用程序,但我仍然想把它放在一个公共git(集线器)回购中。为什么?主要是因为我真的想和我所在领域的其他感兴趣的人分享代码。免费的github回购协议不会有什么坏处,但如果我真的不想分享代码,我会付钱的,当然 基本语境 因此,问题在于将“私人”细节排除在git回购之外。什么是私人细节?Rails在隔离它们方面做得很好。有时它们是独立的文件,例如./config/database.yml,或者一些其他特定于应用程序的文件(不是默认的Rails
- 它需要非常简单。非常简单,我可以给那些几乎不称职的同事留下指导,他们负责部署应用程序(将公共回购与私人数据结合起来),以及更改/添加/提交“私人数据”
- 它应该涵盖“私有数据”的整个文件,理想情况下也包括其他公共文件中的单行,尽管这可能不是必需的,但理想的工具/流程可以做到这一点
- 应用程序将在多台主机上部署/签出/设置,在一台全新主机上签出应用程序应该很容易,而无需在该主机上进行任何特殊设置。同样,与任何主机帐户。和普通git一样,在这种情况下签出也不是问题,对吧
- 快照/依赖关系管理。这里有一个可能需要牺牲,但那会很好。私有配置有时会改变,对吗?使用普通的“单git回购”设置,您的私有数据将与所有其他代码一起进行快照和管理。很容易看出“private data”配置的哪个版本与其余代码的哪个版本相匹配,因为它是自动的——您对特定快照执行git签出,然后您就可以得到该快照上所有代码(包括私有数据)的状态。使用“单独存放私有数据”计划保留此功能会很好,因此仍然可以知道私有数据的哪个版本与git快照的确切版本相匹配。。。。但这可能不可行。 **这个要求首先让我想到“哦,只需使用git子模块,私有git repo中的私有数据,公共git repo通过git子模块链接到它。”如果“私有数据”是一个目录(整个目录,并且只有那个目录),这就行了,但我不确定Rails应用程序是否如此。理想情况下,可以共享部分./config,而私有数据可能在其他地方。但我认为一种选择是确保所有私有数据都在'config'中,并保持所有的配置为'private',即使您真的不需要这样做。不理想,如果有更好的解决方案,但我认为这是一种方法
- 将所有“private”one行程序重构为config/secrets.yml中定义的常量,并将所有“secret”文件重构为config/secrets/。把这些打包成焦油球,私下分发给你的合作者。要对这些机密进行版本设置,请将tar球的md5sum保存在一个版本化文件中,例如config/secrets.tar.md5。编写一个rake任务,仅当md5sum与版本化的md5sum匹配时,才在应用程序上展开tar球
- 您可以使用对称密钥加密这些机密文件中的每一个,然后只分发密钥,但这会将您的机密公开(尽管是以加密的形式),并且依赖于每个人都能正确使用GPG之类的东西
- 在第一种情况下,部署带有秘密的应用程序将非常简单,只需将tar球移动到正确的位置并运行rake任务李>
- 您可以在tar ball的文件名中包含md5sum,这意味着从repo中的secrets.tar.md5版本可以识别与该版本相关的特定tar
- 自有账户(免费最多5个)或
- 共享用户名/密码或
- SSH密钥
如果你不需要分享,我将用于整个项目,因为免费帐户只允许私人项目。是的,对该解决方案不感兴趣,尽管我知道它有时会奏效,但我有“将其打造成宝石”的经验,而额外的抽象确实使事情变得更加复杂,在这种特殊情况下是不合理的。谢谢你!这是一个有趣的想法。你会把焦油球放在哪里?“就像把焦油球移到正确的地方一样简单”--不总是那么简单,如果你找不到它,就别担心