我希望能够将代码推送到dev.myapp.com
进行测试,然后再www.myapp.com
用于生产。Heroku有可能吗?
Answers:
您与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作为我的主人。
假设情况如此,您的部署工作流程可能类似于:
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
heroku create yourapp --remote your-remote
heroku
命令都必须包含--app staging
或--app production
。有什么办法可以设置默认值?(作为评论b / c,这似乎太有针对性了,不能成为一个完整的SO问题。)
这说明了您是否需要知道像我这样的新手所需要的一切:http : //devcenter.heroku.com/articles/multiple-environments
原始问题的关键部分是关于将登台应用程序链接到主应用程序(www.myapp.com)的子域(dev.myapp.com)。任何答案都没有解决这个问题。
步骤1:如Luke Bayes的回答所示,配置应用程序的正式版('myapp')和登台('staging-myapp')版本
步骤2:在您的域管理系统(例如GoDaddy)中:
Create a CNAME record: dev.myapp.com
that points to: proxy.heroku.com
步骤3:将Heroku配置为将dev.myapp.com路由到staging-myapp:
heroku domains:add dev.myapp.com --app staging-myapp
在CNAME记录有时间传播之后,您将能够在dev.myapp.com上运行登台应用程序。
before_filter
,我向我添加了一个钩子,application_controller
以在升级过程中捕获所有内容,并强制用户以管理员身份登录,然后设置管理员cookie,以便仍然可以从“非管理员”的角度看到该应用程序。对我来说工作很好。
你应该检查一下heroku_san
在heroku上处理环境时,它做得很好。
现在事情变得容易了。这是您的操作方式...
$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging
这将为每个应用程序创建命名的远程存储库,您可以在中看到.git/config
。
现在,您可以使用--app或--remote开关来定位特定的应用程序:
$ 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 gem并运行
$ 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
(有关更多信息和快捷方式,请参阅管理应用程序的多个环境| Heroku开发中心。)
RAILS_ENV
和RACK_ENV
到staging
:“创建另一个自定义环境(例如“ staging”并创建config / environments / staging.rb并使用RAILS_ENV = staging部署到Heroku应用程序可能很诱人。这不是一个好习惯)我们建议始终在生产模式下运行,并通过设置config vars修改任何行为。” 更多关于此位置:devcenter.heroku.com/articles/...
git push staging edge work
吗?