2

我做了一些实验,在生产模式下使用start命令运行服务器时,如果公共路径下有新的静态文件生成,客户端无法访问这些新的静态文件(404错误)。但是使用run,可以访问那些静态文件。

所以我的问题是:是否有一些配置可以让我在访问新创建的静态文件的同时使用生产模式?

4

2 回答 2

3

如果您可以使用前端 HTTP 服务器,那将是最佳选择。

在这种情况下,您的文件将不会被删除,play clean-all因为您可以将它们存储在应用程序之外,还可以注意优化服务这些文件,添加缓存头,使用cookie free domain等。最后您可以添加/编辑/删除文件,而无需重新部署您的应用程序。

每次,当我使用前端服务器(这意味着总是)时,我会将所有公共资产从 Play 的文件夹移动到 HTTP 控制的域,相信我这很舒服。

于 2013-04-30T07:35:21.713 回答
2

我只是试图将任何文本文件(比如说dynamic.file.txt)放在上面(这是使用 Play 2.1.1 完成的)

path-to-project/target/scala-2.10/classes/public/dynamic.file.txt

而应用程序开始使用play start命令。这就是发生的事情,我可以在 URL 访问新添加的文件http://yourdomain/assets/dynamic.file.txt

我认为,框架编译目录上的所有内容public。然后,当您处于开发模式时,您的文件会自动编译到target目录中。因此,当应用程序处于生产模式(使用play start命令)时,可以强制将新创建的文件(或动态文件target/scala-xxx/classes/public/*)放在文件夹中。

你可以试试,朋友!;)


更新:

需要注意的是,使用这种hacky技术有一个缺点。如果执行或命令,文件和文件夹上的所有文件都将被删除。所以,请注意!play cleanplay clean-alltarget/*

于 2013-04-30T06:04:57.693 回答