Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将Rails应用程序放在公共git中,保留私有详细信息_Ruby On Rails_Git_Github - Fatal编程技术网

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

Ruby on rails 将Rails应用程序放在公共git中,保留私有详细信息,ruby-on-rails,git,github,Ruby On Rails,Git,Github,我有一个Rails应用程序,它并不是一个真正的“可共享”应用程序,但我仍然想把它放在一个公共git(集线器)回购中。为什么?主要是因为我真的想和我所在领域的其他感兴趣的人分享代码。免费的github回购协议不会有什么坏处,但如果我真的不想分享代码,我会付钱的,当然 基本语境 因此,问题在于将“私人”细节排除在git回购之外。什么是私人细节?Rails在隔离它们方面做得很好。有时它们是独立的文件,例如./config/database.yml,或者一些其他特定于应用程序的文件(不是默认的Rails

我有一个Rails应用程序,它并不是一个真正的“可共享”应用程序,但我仍然想把它放在一个公共git(集线器)回购中。为什么?主要是因为我真的想和我所在领域的其他感兴趣的人分享代码。免费的github回购协议不会有什么坏处,但如果我真的不想分享代码,我会付钱的,当然

基本语境 因此,问题在于将“私人”细节排除在git回购之外。什么是私人细节?Rails在隔离它们方面做得很好。有时它们是独立的文件,例如./config/database.yml,或者一些其他特定于应用程序的文件(不是默认的Rails)。/config/x文件。在其他情况下,令人遗憾的是,在其他需要共享的文件中可能只有一行,但对此并不确定

我现在要问的是不是在Rails3应用程序中帮助查找所有“私人”位置。不,这只是一些基本问题的背景

管理私人物品的简单方法 我真正想要的是建议人们使用某种机制,将私有内容保存在“其他地方”,并将其合并到一个从公共git回购中签出的应用程序中

我知道最基本的想法是“好吧,把它们放在别的地方,你自己选择,然后复制进去。”但是,是的,在哪里?(另一个私有git repo?共享文件系统?),以及如何管理“复制”?ruby/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

如果你需要与公众分享你的项目,我会在一个单独的GEM中透露秘密,该GEM托管在每个合作者的网站上,并向他们提供:

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

如果你不需要分享,我将用于整个项目,因为免费帐户只允许私人项目。

是的,对该解决方案不感兴趣,尽管我知道它有时会奏效,但我有“将其打造成宝石”的经验,而额外的抽象确实使事情变得更加复杂,在这种特殊情况下是不合理的。谢谢你!这是一个有趣的想法。你会把焦油球放在哪里?“就像把焦油球移到正确的地方一样简单”--不总是那么简单,如果你找不到它,就别担心