【问题标题】:Private assets in Play 2.1Play 2.1 中的私有资产
【发布时间】:2013-02-25 17:12:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我现在正在为类似的部署问题而苦苦挣扎,我很想听听社区对此有何看法

标签: scala playframework-2.1


【解决方案1】:

一些选项:

  1. 通常文件会转到conf 文件夹。即:conf/privatefiles/Foo.json
  2. 如果它们经常更改,您可以考虑添加到文件系统中某个外部文件夹的application.conf 路径(完整路径),在这种情况下,您无需重新部署应用程序即可轻松编辑内容:/home/scrapdog/privatefiles/Foo.json
  3. 您也可以将它们存储在数据库中,好处与之前的选项相同 - 易于编辑。

在所有情况下都考虑使用内存缓存以避免每次需要时从文件系统/数据库中读取它。

【讨论】:

  • 谢谢。 #1 对我来说是唯一的选择(因为应用程序必须是独立的)。如何从应用程序统一访问文件(在 conf/privatefiles 中)?
  • #1 是一个糟糕的解决方案,因为资产不一定是配置文件
  • @cdmckay 虽然 OP 只想在应用程序启动时解析文件,但我认为这只是他配置某些东西的自定义方式......
  • 那么像app/assets 这样的操作还能正常工作并被打包吗?
【解决方案2】:

我只是在应用程序根目录使用一个名为data 的文件夹。您可以使用您想要的名称或更好的名称,将实际名称存储在配置文件中。

为了解析它的路径,我使用下面的sn-p:

  lazy val rootPath = {
    import play.api.Play.current
    play.api.Play.application.path.getPath
  }
  lazy val dataPath = rootPath + "/data/"

【讨论】:

  • 这会在生产中工作吗?即,当我构建 dist 或部署到 heroku 时,它会将此目录打包到 jar 中吗?
  • 不,它不会被打包到你的 Jar 文件中。您应该使用@biesior 提到的第一个选项(将文件放在 conf 文件夹中)。
  • @scrapdog 我只是使用git 在生产服务器上部署所有内容。如果将来我需要构建一个 jar,我会将数据文件移动到资源目录中并使用 sbt 插件,例如 Assembly 或 Proguard。
【解决方案3】:

你可以做我所做的,我从@Marius Soutier here 得到了答案。如果你喜欢,请在那里投票赞成他的回答:

您可以将“内部”文档放在conf 文件夹中,它相当于标准sbt 项目中的resources

基本上在conf 下创建一个名为json 的目录并访问它,您可以使用Play.resourceAsStream()。请注意,这会给您一个java.io.InputStream,因为您的文件将成为activator dist 创建的JAR 的一部分。

我的示例是在视图中使用它,但您可以根据需要对其进行修改。

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

Play.resource("json/Foo.json") map { fileURL =>
  Ok(views.html.xxx(XXX.do_something_with_file(fileURL.getFile())))
} getOrElse (InternalServerError)

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多