我有一个Ruby on Rails应用程序,它发送电子邮件。
在制作中,我想使用一些X SMTP服务器,但在开发中我想使用其他一些SMTP服务器(因此我的开发和生产环境中的SMTP设置配置文件不同)
所以我需要维护2个配置文件(每个用于开发/生产环境的SMTP设置一个文件)。
截至目前,我将Y STMP的设置保存在我的开发机器上的文件中。我从github仓库克隆生产代码,使用Y SMTP的设置修改工作副本并继续。然后,当我必须将更改推送到github时,我会反转该过程。它有效,但我认为应该有更好的方法吗?
在开发代码库和生产代码库之间处理这种“小差异”的“git方式”是什么?
更新
Per @Mike Axiak,这是你的意思:(为了简单起见我假设我没有使用ln
,而是使用copy
方法)
两者都添加到.gitignore
如果这是你的意思,有没有办法通过git自动化复制过程?
答案 0 :(得分:5)
Rails已经使用配置/环境目录中的文件支持这种事情。只需在适当的文件中添加您的设置即可。
答案 1 :(得分:3)
在大多数地方,我通过使用一个小的覆盖配置文件来处理这个问题,通常使用.prod或.dev后缀。然后在实际的签出环境中,使用ln将当前文件符号链接(或在windows复制中)到真实设置文件名。然后告诉git忽略设置文件(使用.gitignore)
答案 2 :(得分:1)
如果配置文件不是一直在变化,我通常会在存储库中保留一个版本化的通用设置文件,比如settings.conf.dist
,然后将settings.conf
添加到我的.gitignore
。现在,当我克隆一个新的存储库时,我只需cp settings.conf.dist settings.conf
制作应用程序设置的副本(被git忽略),然后根据需要进行修改。
优点是你在提交/推/拉时不必担心它。缺点是,当您进行更改(如添加新设置)时,您需要记住将其放入.dist
版本,并将其单独添加到每个本地settings.conf
文件中。就像我说的那样,当你不是一直不添加新设置时效果最好。
修改:我只有将在这些本地设置文件中的计算机上进行更改的设置。如果您有其他设置对所有站点都相同,我会有另一个配置文件,然后包含“本地”设置文件。
答案 3 :(得分:1)
执行Gitorious的工作,它使用configuration/environments
支持,并在运行脚本时为脚本提供RAILS_ENV
环境变量,以便它知道要使用的配置。
一个目录,多个配置。在将版本升级到生产时删除未使用的配置。
我还通过基于部署服务器的主机名配置来完成类似但更自动的操作。 dev.mycompany.com vs test.mycompany.com vs mycompany.com有许多更自动化的方法,而不是处理多个文件,这只是人为错误和痛苦的处方。
答案 4 :(得分:0)
我这样解决了。在.bash_aliases的帮助下。
git clone
git checkout -b production.conf
根据需要修改config.file。
git commit -a
git checkout master
用工作副本做点什么。
git checkout production.conf -- config.file
git commit -a
git push