10

我们所做的 :

我们在 Cloudbees 上运行 Play2 应用程序,并从“/conf”目录(在应用程序的类路径中)加载一个文件。

这 2 个片段在本地和 heroku 中工作

Play.application().getFile("conf/myfile.json")

new File("conf/myfile.json")

然而,在 Cloudbees 上,我们得到 FileNotFoundException :

java.io.FileNotFoundException: /var/genapp/apps/..../conf/myfile.json (No such file or directory)

那么如何从 Cloudbees 上的类路径加载文件呢?

4

3 回答 3

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/1079

Cloudbees 文档已更新:https ://wiki.cloudbees.com/bin/view/RUN/Playframework#HLoadingconfigfilesinproduction

于 2013-04-30T12:07:25.797 回答
2

我正在使用播放 2.4。对我有用的是

import play.Play;
import org.apache.commons.io.IOUtils;

  String myfile = IOUtils.toString(Play.application().resourceAsStream("myfile.json"));

注意:application()被称为静态方法。

于 2016-04-28T07:52:25.143 回答
1

似乎 Heroku 通过“播放开始”或“播放运行”运行播放应用程序,这不是播放应用程序在生产中运行的推荐方式 - 这解释了为什么“conf”在那里可见 - 尽管这可能会在未来版本中改变玩。

于 2013-05-01T03:19:53.503 回答