部署+配置文件+ Heroku

我正在使用Heroku来托管Rails应用程序,这意味着使用Git部署到Heroku。 由于Heroku上的“纯Git工作流程”,任何需要上游到服务器的东西都必须在我的本地盒子上进行相同的配置。

但是我需要让某些配置文件有所不同,具体取决于我是在本地设置还是部署在Heroku上。 再次,由于Heroku使用的部署方法,我不能使用.gitignore和模板(正如我已经多次看到的建议,并已用于其他项目)。

我需要的是让git以某种方式跟踪文件的变化,但有选择地告诉git在从特定仓库中提取时不要覆盖某些文件 – 基本上只对单向进行某些更改。

可以这样做吗? 我很感激任何建议!

您可以在每个heroku应用程序的本地设置中持久存储配置变量,这样它们就不必在您的代码中了! 所以相同的代码可以在多个heroku站点上运行,但具有不同的配置。 它非常简单,轻松,优雅……

这是我们使用的方法。 (我们用它来做同样的事情……我们在Heroku上有多个SAME应用程序的克隆,但是我们只想在github上有一个源代码,在我们的开发本地目录中我们执行PUSH到ORIGIN(github),然后当我们有它是我们喜欢它的方式,我们CD到prod本地目录,它转到SAME github存储库,我们只从GITHUB拉到这个目录,从不推(例如,所有推送到github来自我们的开发目录,prod目录只是其他heroku应用程序的临时区域。)

通过在不同的HEROKU站点上具有不同的配置 (如下所述),完全相同的代码在两个站点上运行。

所以我们的工作流程是:( 关键是BOTH目录指向SAME github repo)

cd myDEVdir *....develop away....* git add . git commit -am "another day, another push" git push origin *(to our SINGLE github repo)* git push heroku *(test it out on heroku #1)* cd ../myPRODdir git pull *(grabs SAME code as used on other site *) git push heroku *(now the SAME code runs on Heroku #2)* 

而已!

现在,您将如何在heroku站点上保留特定于站点的配置变量:

http://docs.heroku.com/config-vars

在本地命令行上,对于两个本地目录中的每一个,执行以下操作:

 $ heroku config:add FIRST_CONFIGVAR=fooheroku1 Adding config vars: FIRST_CONFIGVAR => fooheroku1 $ heroku config:add SECOND_CONFIGVAR=barheroku1 Adding config vars: SECOND_CONFIGVAR => barheroku1 

看看你定义的那些:

 $ heroku config FIRST_CONFIGVAR => fooheroku1 SECOND_CONFIGVAR => barheroku1 

然后cd到你的其他目录myPRODdir并执行相同的操作,只将相同的远程heroku变量设置为fooheroku2和barheroku2。

然后在你的rails应用程序中,您可以像这样简单地引用它们:

 a = ENV['FIRST_CONFIGVAR'] 

一个应用程序将读取’fooheroku1’,其他应用程序将显示为’fooheroku2′

最后,在您的LOCAL目录myDEVdir上,在DEV模式下运行,在config/environment/development.rb文件中放置相同的config命令,配置变量的’dev’版本将设置为它们应该是的:

 ENV['FIRST_CONFIGVAR'] = "foodev" ENV['SECOND_CONFIGVAR'] = "bardev" 

轻松,优雅。 谢谢,Heroku!

以下是一些解决方案:

1)如果你只想在heroku上忽略文件,请使用slugignore

2)如果您的更改很小,请保持DRY并使用通用配置文件,为特定于服务器的行为插入交换机

 if Rails.env == "production" #production server code elsif Rails.env == "development" #development server code else #test server code end 

3)如果您的更改很重要,请编写一个配置文件,并为每个其他服务器的配置/初始化程序添加“涂抹文件” 。 基本上,您将使用(2)中的技术使用单独的文件。

4)如果您的更改是SWEEPING(不太可能),则为每个服务器维护单独的分支。

5) 这个脚本可以完全按照您的要求执行,但可能有点过分。

我希望有所帮助。