我有一个Scala Play(2.4)REST API,可以在本地运行。当我将它部署到Heroku时,我遇到了CORS问题,因为我是从一个单独的Web应用程序调用它。
我通过添加基于文档的CORS过滤器解决了这个问题,并且在本地运行时没有收到CORS错误。但是当部署到Heroku时,我仍然会收到标准的CORS错误。
为了隔离问题,我在我的应用程序中添加了一个简单的日志记录过滤器,它在本地再次正常工作。但即便是这个日志记录过滤器也无法在Heroku上运行。
这让我觉得在部署到Heroku时可能没有调用我的过滤器。
我不确定如何解决此问题。任何帮助将不胜感激。
答案 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
)