ruby on rails -如何使用git维护一个稍微不同的产品源代码副本



我有一个Ruby on Rails应用程序,可以发送电子邮件。

在生产环境中,我想使用某个X SMTP服务器,但在开发环境中,我想使用其他SMTP服务器(因此我的SMTP设置配置文件在开发环境和生产环境中是不同的)

所以我需要维护2个配置文件(每个文件用于开发/生产环境的SMTP设置)。

到目前为止,我将Y stp的设置保存在开发机器上的一个文件中。我从github repo中克隆了生产代码,用Y SMTP的设置修改了工作副本,然后继续。然后,当我必须将更改推送到github时,我会反转这个过程。它是有效的,但我在想应该有更好的方法?

什么是"git方式"?要处理这种"小差异"在开发和生产代码库之间?


Per @Mike Axiak,这是你指的流程吗:(假设简单起见,我不使用ln,而是使用copy方法)

设置源代码,使本地机器上有两个设置文件:

  • smtp.settings.prod
  • smtp.settings.dev

均加入.gitignore

在本地复制:

    从github上拉代码
  • 复制smtp.settings.dev到smtp.settings
  • 使用

将更改推送到服务器:

  • 在推送之前,复制文件smtp.settings.prod到smtp.settings

如果这是你的意思,有没有办法通过git自动化复制过程?

Rails已经通过配置/环境目录下的文件支持这种事情。只需在适当的文件中添加您的设置。

在大多数地方,我通过使用一个小的覆盖配置文件来处理这个问题,通常带有.prod或.dev后缀。然后在实际签出环境中,使用ln将当前文件符号链接(或在windows中复制)到实际设置文件名。然后告诉git忽略设置文件(使用.gitignore)

如果配置文件没有一直更改,我通常在存储库中保留一个通用的版本设置文件,例如settings.conf.dist,然后将settings.conf添加到.gitignore中。现在,当我克隆一个新的存储库时,我只需要cp settings.conf.dist settings.conf来复制应用程序的设置(git会忽略),然后根据需要进行修改。

优点是在提交/推/拉时永远不必担心它。缺点是,当您进行诸如添加新设置之类的更改时,您需要记住将其放入.dist版本中,并将其单独添加到每个本地settings.conf文件中。就像我说的,当你不总是添加新设置时,效果最好。

Edit:在这些本地设置文件中,我只有跨机器更改的设置。如果你有其他的设置,将是相同的所有网站,我有另一个配置文件,其中将包括"本地"设置文件。

做giitorious做的事情,它使用configuration/environments支持,并且在运行脚本时为脚本提供RAILS_ENV环境变量,以便它知道使用哪种配置。

一个目录,多个配置。

在发布到生产环境时删除未使用的配置。

我也做了一些类似的事情,但更自动化的是根据部署它的服务器的主机名进行配置。Dev.mycompany.com vs . test.mycompany.com vs .mycompany.com有很多比处理多个文件更自动化的方法,这只是一个人为错误和痛苦的方法。

我是这样解决的。使用.bash_aliases的一点帮助。

git clone
git checkout -b production.conf

修改配置。

git commit -a
git checkout master

处理工作副本

git checkout production.conf -- config.file
git commit -a
git push

最新更新