我在生产模式下使用start
命令运行服务器时进行了一些实验,如果在公共路径下生成了新的静态文件,则客户端无法访问这些新的静态文件(404错误)。但是使用run
,可以访问这些静态文件。
所以我的问题是:是否有一些配置使我能够使用生产模式,而我可以访问新创建的静态文件?
答案 0 :(得分:3)
如果您可以使用最适合的frontend HTTP server。
在这种情况下,play clean-all
之后的示例不会删除您的文件,因为您可以将它们存储在应用程序之外,同时注意您可以优化服务这些文件,添加缓存标头,使用{{最后,您可以添加/编辑/删除文件,而无需重新部署应用程序。
每次,当我使用前端服务器(这意味着总是)时,我将所有公共资产从Play的文件夹移动到HTTP控制域,并相信我这很舒服。
答案 1 :(得分: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 clean
或play clean-all
命令,则target/*
文件和文件夹上的所有文件将被删除。所以,请注意!