在Heroku上暂存实例

时间:2009-08-14 19:38:34

标签: deployment heroku staging

我希望能够将代码推送到dev.myapp.com进行测试,然后推送到www.myapp.com以供生产使用。这可以用Heroku吗?

5 个答案:

答案 0 :(得分:142)

您与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

我通常在'工作'分支工作,并使用Gi​​thub为我的主人。

假设您的情况就是这样,您的部署工作流程可能类似于:

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

答案 1 :(得分:19)

这解释了您是否需要了解您的新手:http://devcenter.heroku.com/articles/multiple-environments

答案 2 :(得分:10)

原始问题的一个关键部分是将登台应用程序链接到主应用程序(www.myapp.com)的子域(dev.myapp.com)。任何答案都没有解决这个问题。

步骤1:配置应用程序的生产('myapp')和登台('staging-myapp')版本,如Luke Bayes的回答所示

第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上运行您的暂存应用。

答案 3 :(得分:8)

您应该查看heroku_san

在heroku的环境中做得非常好。

答案 4 :(得分:6)

现在事情变得更容易了。这是你如何做到的......

为每个环境创建一个应用

$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging

这将为每个应用创建命名的远程回购,您可以在.git/config中看到。

您现在可以使用 - app - 远程开关定位特定应用:

$ heroku info --app myapp-staging
$ heroku info --remote staging

设置Rails环境

对于Rails应用程序,Heroku defaults to the "production" environment。如果您希望暂存应用在暂存环境中运行,请在项目中create the environment并在应用上设置相应的 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

(有关详细信息和快捷方式,请参阅Managing Multiple Environments for an App | Heroku Dev Center。)