Scala Play 2.4过滤器(日志记录,CORS)无法在Heroku上运行

时间:2017-03-19 05:04:56

标签: scala heroku playframework-2.0 cors servlet-filters

我有一个Scala Play(2.4)REST API,可以在本地运行。当我将它部署到Heroku时,我遇到了CORS问题,因为我是从一个单独的Web应用程序调用它。

我通过添加基于文档的CORS过滤器解决了这个问题,并且在本地运行时没有收到CORS错误。但是当部署到Heroku时,我仍然会收到标准的CORS错误。

为了隔离问题,我在我的应用程序中添加了一个简单的日志记录过滤器,它在本地再次正常工作。但即便是这个日志记录过滤器也无法在Heroku上运行。

这让我觉得在部署到Heroku时可能没有调用我的过滤器。

我不确定如何解决此问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

这看起来很奇怪,因为Heroku实际上只运行

的输出

% sbt stage

如果您创建stage版本然后运行Procfile中的任何内容(例如:

),您是否过滤了工作?

% target/universal/stage/bin/myappname -Dhttp.port=$PORT

工作设置:

我在Heroku中运行了几个Play 2.4应用程序,带有工作过滤器,这是我现在面前的 Play 2.4.6 应用程序的示例:

build.sbt

确保指定了filters依赖关系:

libraryDependencies ++= Seq(
  ws,
  cache,
  filters,
  ...
)

application.conf

配置CORS模块:

play.modules.enabled += "play.filters.cors.CORSModule"
play.filters.cors {
  allowedOrigins = null,      # This means "all"
  allowedHttpMethods = null   # This means "all"
  exposedHeaders = ["Authorization", "Content-Length", "Content-Type", "Content-disposition"],
  preflightMaxAge = 14 days
}

Filters.scala

(位于app目录的根目录中):

import javax.inject.Inject
import play.api.http.HttpFilters
import play.filters.cors.CORSFilter

class Filters @Inject() (corsFilter: CORSFilter) extends HttpFilters {
  def filters = Seq(corsFilter)
}

如果您已经完成了所有配置并且无法正常工作,那么您确定您对Heroku的部署实际上是否已成功完成?检查日志(% heroku logs --tail