Heroku区分生产和临时应用程序

时间:2013-09-06 21:52:17

标签: git heroku playframework synchronization playframework-2.0

我正在创建一个Play 2.1.3网络应用程序,我在Heroku中设置了两个环境,一个用于制作,一个用于分段。

区分这两种环境的最简单方法是什么?例如,我不希望搜索机器人为我的暂存应用程序编制索引,因此我想为暂存添加robots.txt,但是在推送存储库时也会添加它以进行生产。

我的计算机上是否应该有两个本地(app-prodapp-staging)Play应用程序和单独的git repos?然后我将不得不保持两个应用程序同步。在验证Heroku上的暂存应用程序成功运行后,我必须在我的计算机上本地同步这些更改与我的生产应用程序(我如何使用Git?)然后将这些更改推送到Heroku上的生产应用程序。

2 个答案:

答案 0 :(得分:1)

你可以创建一个名为robots.txt的路由,它返回404或实际资产。它可以查看application.conf,而application.conf又可以从您为不同环境设置的环境变量中读取,以修改应用程序行为。

编辑:

我应该更好地解释我的解决方案。您可以创建一个控制器以具有一些次要逻辑。这是返回404或实际robots.txt文件的逻辑的地方。

package controllers

import java.io.File
import play.api.mvc._

object Robots {

  def get = Action {
    Ok.sendFile(
      content = new File("/path/to/your/robots.txt"),
      fileName = _ => "robots.txt"
    )
  }
}

您可以在此处找到有关提供文件的文档:http://www.playframework.com/documentation/2.2.x/ScalaStream

然后路由文件只有

GET /robots.txt   controllers.Robots.get

这将比资产控制器具有更高的优先级

答案 1 :(得分:1)

我不熟悉Play,但对于我的应用程序,我在它们上使用基本的身份验证提示进行升级,所以我知道在我正在处理它或索引的时候什么都看不到。

如果你想使用更传统的git流你最好有两个Heroku应用程序,并使用相应的分支从一个git repo部署到它们 - 当你将你的repo连接到Heroku然后命名遥控器像{{1 }}和production因此,当您推送时更容易区分。 (到目前为止,你可能会习惯看staging

例如

git push heroku master

然后您的部署过程变为;

  • git remote add production <git url of production heroku app> git remote add staging <git url of staging heroku app> - 将本地登台分支部署到git push staging staging:master远程主分支
  • 验证暂存Heroku app
  • staging - 切换到本地主分支
  • git checkout master - 将登台合并到本地主人
  • git merge staging - 将本地主服务器部署到git push production master远程

Heroku还引入了一个最近称为Pipelines的新功能,听起来它可能也适合https://devcenter.heroku.com/articles/labs-pipelines