Частные активы в Play 2.1

В приложении Play 2.1, где находится надлежащее место для хранения частных активов?

Под «частным активом» я имею в виду файл данных, который используется приложением, но недоступен для пользователя.

Например, если у меня есть текстовый файл ( Foo.json )), который содержит выборочные данные, которые анализируются каждый раз, когда запускается приложение, каков будет правильный каталог в проекте для его сохранения?

Foo.json needs to be included in the deployment, and needs to be uniformly accessible from the code in both development and production.

4
nl ja de
Я сейчас борюсь с подобными вопросами развертывания, и мне очень интересно узнать, что сообщество должно сказать об этом
добавлено автор Ian McMahon, источник

3 ответы

Некоторые варианты:

  1. Usually the files goes to conf folder. ie: conf/privatefiles/Foo.json
  2. If they are subject of often change you can consider adding to your application.conf path to the external folder somwhere in the filesystem (full path), in such case you'll be able to edit the content easily without redeploying the apps: /home/scrapdog/privatefiles/Foo.json
  3. You can store them in database as well, benefits are the same as in previous option - easy editing.

Во всех случаях рекомендуется использовать кеш памяти, чтобы избежать его считывания из файловой системы/базы данных каждый раз, когда это необходимо.

3
добавлено
Благодарю. # 1 - единственный вариант для меня (поскольку приложение должно быть самодостаточным). Как я могу обеспечить равномерный доступ к файлам (в conf/privatefiles) из приложения?
добавлено автор kes, источник
@cdmckay, в то время как OP хочет разобрать файл только при запуске приложения. Я предполагаю, что это просто его собственный способ настроить что-то ...
добавлено автор biesior, источник
# 1 - это очень плохое решение, поскольку активы не обязательно являются конфигурационными файлами
добавлено автор cdmckay, источник
Так будет ли что-то вроде app/assets работать нормально и упаковать?
добавлено автор cdmckay, источник

Я просто использую папку с именем data </​​code> в корне приложения. Вы можете использовать имя, которое хотите или лучше, сохранить фактическое имя в файле конфигурации.

Чтобы разрешить его путь, я использую следующий фрагмент:

  lazy val rootPath = {
    import play.api.Play.current
    play.api.Play.application.path.getPath
  }
  lazy val dataPath = rootPath + "/data/"
1
добавлено
@scrapdog Я просто использую git для развертывания всего на производственном сервере. Если в будущем мне нужно будет создать единую банку, я бы переместил файл данных в каталог ресурсов и использовал плагин sbt, такой как Assembly или Proguard.
добавлено автор paradigmatic, источник
Это будет работать на производстве? то есть, будет ли он упаковывать этот каталог в банку, когда я создам dist или разворачиваю герою?
добавлено автор kes, источник
Нет, он не будет упакован в ваш файл Jar. Вам следует перейти к первому варианту, указанному @biesior (поместите ваши файлы в папку conf).
добавлено автор nico_ekito, источник

Вы можете делать то, что я сделал, я получил ответ от @Marius Soutier здесь . Пожалуйста, поддержите его ответ там, если вам это нравится:

Вы можете поместить «внутренние» документы в папку conf , это эквивалент resources в стандартных проектах sbt.

В основном создайте директорию под conf , называемую json , и для ее доступа используйте Play.resourceAsStream() . Обратите внимание, что это дает вам java.io.InputStream , потому что ваш файл будет частью JAR, созданным с помощью активатора dist .

Мой пример использует его в представлении, но вы можете изменить его, как хотите.

Play.resourceAsStream("json/Foo.json") map { inputStream =>
  Ok(views.html.xxx(XXX.do_something_with_stream(inputStream)))
} getOrElse (InternalServerError)

Вы также можете использовать Play.resource() , это даст вам java.net.URL , вы можете использовать getFile() , чтобы получить java.io.File .

Play.resource("json/Foo.json") map { fileURL =>
  Ok(views.html.xxx(XXX.do_something_with_file(fileURL.getFile())))
} getOrElse (InternalServerError)
1
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Scala User Group
Scala User Group
1 486 участник(ов)

[RU] Scala Chat. Rules, additional links, FAQ: https://telegra.ph/Russian-Speaking-Scala-User-Group-08-27

Scala Jobs
Scala Jobs
852 участник(ов)

Rules: http://telegra.ph/My-lyudi-i-ehto-znachit-chto-nam-nuzhna-organizaciya-02-07 Main Scala Channel: https://t.me/scala_jobs_feed Flood Room: https://t.me/scala_ponv