Play 2.1中的私有资产

时间:2013-02-25 17:12:33

标签: scala playframework-2.1

在Play 2.1应用程序中,存放私有资产的适当位置在哪里?

私有资产",我指的是应用程序使用但用户无法访问的数据文件。

例如,如果我有一个文本文件(Foo.json),其中包含每次应用程序启动时解析的样本数据,那么项目中存储它的正确目录是什么?

Foo.json需要包含在部署中,并且需要在开发和生产中从代码中统一访问。

3 个答案:

答案 0 :(得分:3)

一些选项:

  1. 通常文件会转到conf文件夹。即:conf/privatefiles/Foo.json
  2. 如果它们经常更改,您可以考虑在文件系统(完整路径)中添加到外部文件夹的application.conf路径,在这种情况下,您将能够轻松编辑内容而无需重新部署应用:/home/scrapdog/privatefiles/Foo.json
  3. 您也可以将它们存储在数据库中,其优点与之前的选项相同 - 易于编辑。
  4. 在所有情况下,请考虑使用内存缓存,以避免每次在需要时从文件系统/数据库中读取它。

答案 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