Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment Heroku上的暂存实例_Deployment_Heroku_Staging - Fatal编程技术网

Deployment Heroku上的暂存实例

Deployment Heroku上的暂存实例,deployment,heroku,staging,Deployment,Heroku,Staging,我希望能够将代码推送到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 # sta

我希望能够将代码推送到
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
$ git push staging master
$ git push production master
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote 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上的环境方面做得很好。

这解释了如果你是像我这样的新手,你需要知道的一切:

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

步骤1:按照Luke Bayes的回答,配置应用程序的生产('myapp')和暂存('staging-myapp')版本

步骤2:在您的域管理系统(例如GoDaddy)中:

步骤3:配置Heroku将dev.myapp.com路由到临时myapp:

heroku domains:add dev.myapp.com --app staging-myapp

在CNAME记录有时间传播之后,您将能够在dev.myapp.com上运行登台应用程序。

现在事情变得更容易了。这是你怎么做的

为每个环境创建一个应用程序 这将为每个应用程序创建命名的远程repo,您可以在
.git/config
中看到

您现在可以使用--app--remote开关以特定应用为目标:

$ heroku info --app myapp-staging
$ heroku info --remote staging
设置Rails环境 对于Rails应用程序,Heroku。如果希望暂存应用程序在暂存环境中运行,请在项目中,在应用程序上设置相应的RAILS_ENVRAKE_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
这是一个巨大的痛苦,所以我只是用我的宝石和运行

$ rake heroku:config:load[myapp-staging]
将项目的YAML配置文件加载到Heroku中

部署 现在你只需像这样推到Heroku:

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
$ git push staging master
$ git push production master
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production
然后像这样迁移:

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
$ git push staging master
$ git push production master
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production


(有关更多信息和快捷方式,请参阅。)

谢谢——这是有道理的(我对git很差劲)。问题:假设我正在对分支“edge”进行一些尖端更改。如何在不影响myapp(当前正在主分支上运行)的情况下将该分支推送到暂存myapp?
git push staging edge有效吗
?为了让您继续,您只需将edge合并到您的staging分支并推送它。你们的生产部门是独立的,干净的。您可以随时对其进行分支,并进行仅合并到该分支的更改。您不必使用默认的“heroku”远程分支创建应用程序,也不必在删除该分支后使用更好的解决方案,例如:
heroku创建您的应用程序--remote your remote
,一旦您设置了该分支,您所有的
heroku
命令都需要包括
--应用程序登台
--应用程序生产
。有没有办法设置默认值?(作为评论b/c提问这似乎太有针对性了,不是一个全面的SO问题。)@PaulAJungwirth要设置默认Heroku应用程序,请使用类似“git config Heroku.remote staging”的内容。更多关于Heroku的文档。访问控制如何,这样它就不会出现在谷歌等网站上,而人们不会偶然发现它并认为它是真的?有好的解决方案吗?是的,最简单的方法是跳过GoDaddy步骤,使用Heroku URL直接从Heroku域访问应用程序的“开发”版本。(例如)然而,如果你想让“dev”离开你的域名,你可以安装一个robots.txt文件,告诉google、bing等不要索引你的dev站点。这将有助于将其排除在搜索引擎之外。我最终在我的
应用程序\u控制器
上添加了一个
前过滤器
挂钩,以捕获登台过程中的所有内容,并强制用户以管理员身份登录,然后设置管理员cookie,这样我仍然可以从“非管理员”的角度查看应用程序。对我来说效果不错。Heroku不鼓励将
RAILS_ENV
RACK_ENV
设置为
staging
:“可能会尝试创建另一个自定义环境,例如“staging”并创建一个config/environments/staging.rb并部署到带有RAILS_ENV=staging的Heroku应用程序。这不是一个好做法。相反,我们建议始终在生产模式下运行,并通过设置配置变量修改任何行为。”关于这方面的更多信息:@Koen-根据我的经验,尝试在没有环境背景的情况下管理复杂的Rails配置是完全不切实际的,无论是在Heroku还是其他地方。如果你有一整套的连接字符串、API键等用于登台应用程序,另一套用于生产应用程序,你真的要为每个应用程序分别设置这些配置变量吗?那只是自找麻烦-Heroku在这里给出了不好的建议。谢谢。我正在寻找真正得到一个真正的网址,可能与commithash分期。我认为这是Zeit Now或Netlify让它变得容易的事情。