动态路线不适用于生产中的资产

时间:2013-07-24 19:18:14

标签: java playframework playframework-2.0

有这样的路线:

GET /assets/*file controllers.Assets.at(path="/public", file)

当我在公共/图片/图片中添加一些图片/我想使用此网址http://localhost:9000/assets/images/pictures/test.jpg

访问它们

它在服务器处于开发模式时有效,但在生产中我每次添加图像时都必须重新启动它...

我如何绕过它?

问候。

2 个答案:

答案 0 :(得分:2)

Play的静态资源控制器将文件从类路径中拉出,不适合动态使用。如果您需要使用动态资产,那么您需要编写自己的控制器来处理这个问题。

答案 1 :(得分:1)

正如James所说,Play的静态资产控制器将文件从类路径中拉出来。您还可以定义应用程序之外的类路径。

您可以通过在Build文件中定义以下行来完成此操作。

val assetDir = sys.props.get("java.io.tmpdir").get + "/outside-cp"

val main = play.Project(appName, appVersion, appDependencies).settings(
  unmanagedClasspath in Runtime += file(assetDir),
  unmanagedClasspath in Compile += file(assetDir),
  unmanagedClasspath in Test += file(assetDir)

现在创建以下目录:

/tmp/outside-cp/assets

最后,为您的外部资产创建一条路线:

GET /outside/*file   controllers.Assets.at(path="/assets", file)

启动您的应用程序并将文件放在assets目录中。现在,您可以通过以下URL访问该文件:

http://localhost:9000/outside/your-placed.file

注意:您不能直接将资源目录用作类路径,因为Play的资产控制器会自动使用路径为给定文件添加前缀。并且定义空路径不起作用。

如果您运行play stage打包应用程序,则必须更改启动脚本以将类路径添加到应用程序中。