我正在创建一个Play 2.1.3网络应用程序,我在Heroku中设置了两个环境,一个用于制作,一个用于分段。
区分这两种环境的最简单方法是什么?例如,我不希望搜索机器人为我的暂存应用程序编制索引,因此我想为暂存添加robots.txt
,但是在推送存储库时也会添加它以进行生产。
我的计算机上是否应该有两个本地(app-prod
和app-staging
)Play应用程序和单独的git repos?然后我将不得不保持两个应用程序同步。在验证Heroku上的暂存应用程序成功运行后,我必须在我的计算机上本地同步这些更改与我的生产应用程序(我如何使用Git?)然后将这些更改推送到Heroku上的生产应用程序。
答案 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
远程主分支staging
- 切换到本地主分支git checkout master
- 将登台合并到本地主人git merge staging
- 将本地主服务器部署到git push production master
远程Heroku还引入了一个最近称为Pipelines的新功能,听起来它可能也适合https://devcenter.heroku.com/articles/labs-pipelines。