Загрузите файл из каталога '/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" видна там, хотя это может измениться в будущая версия игры.