【问题标题】:Playframework: Strange behavior of "play start" - Caching issue?Playframework:“播放开始”的奇怪行为 - 缓存问题?
【发布时间】:2012-05-31 15:06:10
【问题描述】:

我目前正在使用 play framework 2 开发一个 web 应用程序。我在 /public 目录下创建了一个文件夹“files”。当我使用“play run”启动服务器时,该目录下的所有资源都可以访问。

部署到服务器后。我通过运行“play start”启动服务器,发现“files”下的资源再也找不到了。

我想知道“play start”和“play run”不一致的原因是什么

更新:经过几次试验。我发现是新上传的资源无法显示。场景如下:

1. play start --> server starts.
2. use application to upload a few images to the server.
3. try to display the uploaded image --> nothing is shown. browser shows the resource is not accessible.
4. kill the server process with task manager.
5. rm RUNNING_PID
6. run play start again 
7. Try to display the uploaded image --> now the images are showing.

所以,看起来像“播放开始”的“热更新”问题 我可以做任何配置来让服务器接受更改吗? 谢谢。

【问题讨论】:

  • 已经在您本地的play start 进行测试?如果有堆栈跟踪,请添加到您的帖子中。
  • 不,由于我在 stackoverflow.com/questions/10713173/… 中描述的错误,我无法在本地计算机上运行“播放开始”

标签: playframework playframework-2.0


【解决方案1】:

您将图像具体存储在哪里? 在编译时,静态资产从/public 复制到/target/scala-2.9.1/classes/public。该目录是类路径的一部分,并且从那里提供资产。因此,如果您在运行时将文件存储在那里,应该可以找到它们。

旁注:这可能不是一个可持续的解决方案,因为您的用户加载的图像在下一次构建期间会被删除。也许您应该考虑在应用安装之外使用符号链接(注意!安全问题!)或将资产存储在其他地方,数据库或 S3 始终是不错的选择。

【讨论】:

  • 我将图像放在 /public/files 目录下。那么,您是说当用户将路径 /assets/files/xxx.jpg 放入 url 时,服务器会查找 /target/scala-2.9.1/classes/public/files 来查找此文件?如果是这样,我可以在用户上传时在这两个地方创建我的图像。但是为什么playframework是这样设计的呢?提供静态资源不是常见的场景之一吗?
  • @wei-ma: 当然是这样,但是 static 资源并不意味着在运行时被更改...因此在编译时编译,可选地 gzipped .正如我建议的那样:将上传的文件放在磁盘上的其他位置并编写您自己的简单控制器,根据请求提供此文件。
  • 猜我太习惯 IIS 的行为方式了。默认情况下,IIS 按原样提供静态内容,不缓存,不压缩。我想知道我是否可以配置 play 来做同样的事情。我相信实现一个简单的控制器不会太难,但框架不应该让我选择不拥有这些额外功能吗?
  • 我会将您的回答标记为已接受。但我也在下面提供了我最终是如何解决这个问题的。
【解决方案2】:

基于@Joerg Viola 的回答。我决定实施自己的行动来服务静态资源。事实证明这非常容易。从this link,我学会了一行行实现一个文件服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2013-01-11
    • 2016-08-17
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多