从Cloudbees上的'/ conf'目录加载文件

时间:2013-04-30 12:07:26

标签: playframework playframework-2.0 cloudbees

我们做什么:

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

这两个片段在本地和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上从classpath加载文件?

3 个答案:

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

Cloudbees文档已更新: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”在那里可见 - 尽管这可能会改变未来版本的游戏。