所以我研究并发现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>
如何在Production
模式下访问新上传的资源文件?
答案 0 :(得分:2)
因此,在Play编译代码后发现您无法提供新添加的文件,下一个最佳选择是使用许多人建议的前端HTTP服务器。我最终使用了nginx。由于我只使用nginx来提供文件而没有别的,我将发布我为使其工作而采取的步骤。
我正在使用Mac,所以我通过在终端中调用$ brew install wget
来安装Homebrew。 Homebrew很好,因为你可以通过简单地调用$ brew install 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服务器