【发布时间】:2010-11-19 18:28:42
【问题描述】:
我希望能够将代码推送到 dev.myapp.com 进行测试,然后推送到 www.myapp.com 以供生产使用。 Heroku 可以做到这一点吗?
【问题讨论】:
标签: deployment heroku staging
我希望能够将代码推送到 dev.myapp.com 进行测试,然后推送到 www.myapp.com 以供生产使用。 Heroku 可以做到这一点吗?
【问题讨论】:
标签: deployment heroku staging
您与 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
【讨论】:
git push staging edge work?
heroku create yourapp --remote your-remote
heroku 命令都需要包含--app staging 或--app production。有没有办法设置默认值? (要求作为评论 b/c 这似乎过于有针对性,不能成为一个成熟的 SO 问题。)
你应该检查heroku_san
它在处理 heroku 上的环境方面做得非常好。
【讨论】:
如果您是像我这样的新手,这说明了您需要知道的一切:http://devcenter.heroku.com/articles/multiple-environments
【讨论】:
原始问题的一个关键部分是将临时应用程序链接到主应用程序 (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 上运行您的暂存应用程序。
【讨论】:
application_controller 中添加了一个before_filter 挂钩,以捕获暂存中的所有内容并强制用户以管理员身份登录,然后设置一个管理员cookie,这样我仍然可以从“非管理员”的观点。对我来说工作得很好。
现在事情变得更容易了。这是你的做法......
$ 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 defaults to the "production" environment。如果您希望您的 staging 应用程序在 staging 环境中运行,请在您的项目中 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 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
(有关更多信息和快捷方式,请参阅Managing Multiple Environments for an App | Heroku Dev Center。)
【讨论】:
RAILS_ENV 和 RACK_ENV 设置为 staging 是 Heroku 不鼓励的:“创建另一个自定义环境(例如“staging”)并创建一个 config/environments/staging.rb 可能很诱人并使用 RAILS_ENV=staging 部署到 Heroku 应用程序。这不是一个好习惯。相反,我们建议始终在生产模式下运行并通过设置配置变量来修改任何行为。更多信息在这里:devcenter.heroku.com/articles/…