您可以将配置变量永久存储在每个 heroku 应用程序的本地设置中,这样它们就不必在您的代码中了!因此相同的代码可以在多个 Heroku 站点上运行,但配置不同。它非常简单,轻松,优雅......
这是我们使用的方法。 (我们用它来做同样的事情......我们在 Heroku 有多个相同应用程序的克隆,但我们只想要 github 上的一个源,在我们的 dev 本地目录中,我们执行 PUSH to ORIGIN (github),然后当我们有按照我们喜欢的方式,我们 CD 到 prod 本地目录,该目录转到相同的 github 存储库,我们只从 GITHUB PULL 到这个目录,从不推送(例如,所有推送到 github 来在我们的 dev 目录中,prod 目录只是另一个 Heroku 应用程序的暂存区。)
通过在不同的 HEROKU 网站上使用不同的配置(如下所述),EXACT SAME CODE 可以在两个 heroku 网站上运行。
所以我们的工作流程是:(关键是两个目录都指向同一个 github 仓库)
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 vars 设置为 fooheroku2 和 barheroku2。
然后在您的 Rails 应用程序中,您可以像这样简单地引用它们:
a = ENV['FIRST_CONFIGVAR']
一个应用程序将读取“fooheroku1”,另一个应用程序将读取“fooheroku2”
最后,在您以 DEV 模式运行的本地目录 myDEVdir 上,将相同的配置命令放入您的 config/environment/development.rb 文件中,您的“开发”版本的配置变量将被设置为应有的任何值:
ENV['FIRST_CONFIGVAR'] = "foodev"
ENV['SECOND_CONFIGVAR'] = "bardev"
简单,优雅。谢谢,Heroku!