Загрузите файл из каталога '/conf' на Cloudbees

Что мы делаем:

Мы запускаем приложение Play2 на Cloudbees и загружаем файл из каталога '/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)

Итак, как загрузить файл из classpath в Cloudbees?

Ответ 1

Ну, файлы в '/conf' находятся в пути к классам, а не в файловой системе, поэтому нам нужно загрузить файл следующим образом:

Play.application.resourceAsStream("myfile.json")
//.resource() also works - depends what we want

Обратите внимание, что мы не помещаем "conf" в файлы пути, находящиеся в пути к корневому каталогу.

Обратите внимание, что в процессе производства он поступает из jar/zip, а не из файла, поэтому getFile несколько вводит в заблуждение в игре.

Майкл Нил из Cloudbees открыл эту проблему: https://github.com/playframework/Play20/issues/1079

Документация Cloudbees обновлена: https://wiki.cloudbees.com/bin/view/RUN/Playframework#HLoadingconfigfilesinproduction

Ответ 2

Я использую игру 2.4. Что для меня работало

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

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

ПРИМЕЧАНИЕ: application() вызывается как статический метод.

Ответ 3

Кажется, что Heroku запускает приложения для игр через "запуск игры" или "play run", который не является рекомендуемым способом для запуска приложений для игр, - это объясняет, почему "conf" видна там, хотя это может измениться в будущая версия игры.