我们在Cloudbees上运行Play2应用程序,并从'/ conf'目录(在应用程序的类路径内)加载文件。
这两个片段在本地和heroku工作
Play.application().getFile("conf/myfile.json")
和
new File("conf/myfile.json")
java.io.FileNotFoundException: /var/genapp/apps/..../conf/myfile.json (No such file or directory)
那么如何在Cloudbees上从classpath加载文件?
答案 0 :(得分:13)
嗯,'/ conf'中的文件在类路径中而不在文件系统中,所以我们需要以这种方式加载文件:
Play.application.resourceAsStream("myfile.json")
//.resource() also works - depends what we want
请注意,我们不会在路径中放置“conf” - 其中的文件位于根目录中的类路径中。
请注意,在制作中它来自jar / zip,而不是文件 - 所以getFile在游戏中有些误导。
来自Cloudbees的Michael Neale解决了这个问题:https://github.com/playframework/Play20/issues/1079Cloudbees文档已更新:https://wiki.cloudbees.com/bin/view/RUN/Playframework#HLoadingconfigfilesinproduction
答案 1 :(得分:2)
我正在使用游戏2.4。对我有用的是
import play.Play;
import org.apache.commons.io.IOUtils;
String myfile = IOUtils.toString(Play.application().resourceAsStream("myfile.json"));
注意:application()
被称为静态方法。
答案 2 :(得分:1)
似乎Heroku通过“播放开始”或“播放运行”运行播放应用程序,这不是播放应用程序在生产中运行的推荐方式 - 这解释了为什么“conf”在那里可见 - 尽管这可能会改变未来版本的游戏。