Scala Play 2.4 过滤器(日志记录、CORS)在 Heroku 上不起作用

Scala Play 2.4 Filters (Logging, CORS) not working on Heroku

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

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

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

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

我不确定还有什么方法可以解决这个问题。任何帮助将不胜感激。

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

的输出

% sbt stage

如果您创建 stage 构建然后 运行 您在 Procfile 中拥有的任何内容(例如:

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

工作设置:

我有几个 Play 2.4 应用程序 运行ning 在 Heroku 中,带有工作过滤器,这是我在 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 )