Play!框架:生产模式下无法访问资产

6
所以我进行了研究并发现Play的Production模式在处理assets时与Development模式有不同的行为。
我的网站允许用户上传图片,并在上传后立即在页面上显示。在开发模式下,图片可以正常显示。但在生产模式下,找不到该图片。我理解,在生产模式下,代码没有识别新写入的文件。
一个遇到类似问题的用户提供了一个解决方案,但是它是用Scala编写的。我正在使用Java编写,不知道这个用户的解决方案具体是做什么:Play! Framework: File not served after upload until play clean 看起来这个解决方案似乎是将文件作为下载提供的?因为如果是这样的话,这不是我想要的。我希望通过html访问文件并将其显示出来,就像这样:
<img src='@routes.Assets.at("images/fileName")'></img>

我该怎么做才能在生产模式下访问新上传的资源文件?

2
请参阅此讨论:https://groups.google.com/d/msg/play-framework/iHwp1FIjZbw/UaRq_3NTpLoJ - James Ward
谢谢你提供的链接。我做了很多研究,但没有发现这个。James Roper的回复基本上总结了资产控制器的限制。 - cYn
1个回答

3
找到Play编译代码后无法提供新添加文件的服务,下一个最好的选择是使用前端HTTP服务器,正如许多人建议的那样。我最终使用了nginx。由于我只使用nginx来提供文件而不做其他用途,这里介绍了我实现它的步骤。
我使用的是Mac,所以我在终端中调用$ brew install wget 来安装Homebrew。Homebrew很好用,因为你可以通过简单地调用$ brew install nginx来安装nginx。
我使用了这个网站来指导我如何修改nginx的配置文件:http://learnaholic.me/2012/10/10/installing-nginx-in-mac-os-x-mountain-lion/ 然后我只需修改配置文件:
location / {
    root   html;
    index  index.html index.htm;
}

为了

location / {
        root   /Users/myName/playProject/public;
    }

public指的是Play项目中的文件夹。我这样做是为了不必重新排列我的代码。所以现在,而不是

<img src='@routes.Assets.at("images/fileName")'></img>

我使用

<img src='http://localhost:8080/images/fileName'></img>

其中端口8080是我的nginx服务器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接