题
我希望能够将代码推送到 dev.myapp.com
用于测试,然后 www.myapp.com
供生产使用。Heroku 可以做到这一点吗?
解决方案
Heroku 的接口本质上是一个 Git 分支。Heroku gem 通过其 API 完成一些工作,但在您的 Git 存储库中,它只是一个新的远程分支。
heroku create yourapp # production
git br -D heroku # delete the default branch
heroku create staging-yourapp # staging
git br -D heroku # delete the default branch
在 Heroku 上设置多个应用程序后,您应该能够像这样配置 Git 存储库:
git remote add staging git@heroku.com:staging-yourapp.git
git push origin staging
git remote add production git@heroku.com:yourapp.git
git push origin production
我通常在“工作”分支工作,并使用 Github 作为我的 master。
假设您就是这种情况,您的部署工作流程可能类似于:
git co -b working
# do some work
# push to github:
git co master
git merge working
git push
# push to staging:
git co staging
git merge master
git push origin staging
# push to production
git co production
git merge master
git push origin production
其他提示
这说明你需要知道的一切,如果你像我这样的新手: http://devcenter.heroku.com/articles /多环境
原来的问题的一个关键部分是关于分段的应用程序连接到主应用程序(www.myapp.com)的一个子域(dev.myapp.com)。这未在任何答案得到解决。
步骤1:如由卢克贝叶斯在应答指示配置既生产(“MyApp的”)和分期(“分期-MYAPP”)应用版本
步骤2:在你的域管理系统(例如GoDaddy的):
Create a CNAME record: dev.myapp.com
that points to: proxy.heroku.com
步骤3:配置Heroku的路由dev.myapp.com到分期-MyApp的:
heroku domains:add dev.myapp.com --app staging-myapp
CNAME记录有时间传播后,您将能够在dev.myapp.com运行暂存应用程序。
您应该检查 heroku_san
它做了很好的工作玩弄在Heroku环境。
现在情况更容易。这里是你如何做到这一点...
为每个环境创建应用
$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging
这将创建一个名为对于每个应用程序,它可以在.git/config
看到远程回购。
现在可以使用的 - 应用或 - 远程强>切换到针对特定的应用程序:
$ heroku info --app myapp-staging
$ heroku info --remote staging
组轨道环境
有关Rails应用,Heroku的默认为 “生产” 环境。如果你希望你的升级应用程序在一个临时的环境,运行在您的项目创造环境和设置相应的 RAILS_ENV 和<强> RAKE_ENV 强>上的应用程序的环境变量:
$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging
配置环境
如果您有其他的配置变量,你需要通过他们在每一个的良好环境。
$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc
这是一个巨大的痛苦,虽然,所以我只是用我的 snappconfig 宝石和运行
$ rake heroku:config:load[myapp-staging]
我的项目的YAML配置文件加载到Heroku的。
部署
现在你只是推到Heroku的是这样的:
$ git push staging master
$ git push production master
和迁移是这样的:
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production
(见管理多个环境中的一个App |。Heroku的开发中心更多的信息和快捷方式)