在Play 2.1应用程序中,存放私有资产的适当位置在哪里?
私有资产",我指的是应用程序使用但用户无法访问的数据文件。
例如,如果我有一个文本文件(Foo.json
),其中包含每次应用程序启动时解析的样本数据,那么项目中存储它的正确目录是什么?
Foo.json
需要包含在部署中,并且需要在开发和生产中从代码中统一访问。
答案 0 :(得分:3)
一些选项:
conf
文件夹。即:conf/privatefiles/Foo.json
application.conf
路径,在这种情况下,您将能够轻松编辑内容而无需重新部署应用:/home/scrapdog/privatefiles/Foo.json
在所有情况下,请考虑使用内存缓存,以避免每次在需要时从文件系统/数据库中读取它。
答案 1 :(得分:1)
我只是在应用程序根目录下使用名为data
的文件夹。您可以使用所需的名称或更好的名称,将实际名称存储在配置文件中。
要解析其路径,请使用以下代码段:
lazy val rootPath = {
import play.api.Play.current
play.api.Play.application.path.getPath
}
lazy val dataPath = rootPath + "/data/"
答案 2 :(得分:1)
你可以做我做的事,我从@Marius Soutier here得到答案。如果你喜欢,请在那里提出他的答案:
您可以将“内部”文档放在conf
文件夹中,它相当于标准sbt项目中的resources
。
基本上在名为conf
的{{1}}下创建目录并访问它,您将使用json
。请注意,这会为您提供Play.resourceAsStream()
,因为您的文件将成为java.io.InputStream
创建的JAR的一部分。
我的示例是在视图中使用它,但您可以根据需要进行修改。
activator dist
您也可以使用Play.resourceAsStream("json/Foo.json") map { inputStream =>
Ok(views.html.xxx(XXX.do_something_with_stream(inputStream)))
} getOrElse (InternalServerError)
,这会为您提供Play.resource()
,您可以使用java.net.URL
从中获取getFile()
。
java.io.File