2012-05-28 3 views
4

ellou»Прямые обслуживающие файлы из внешней структуры каталогов Play Игроки

мне нужно клеть обычай CDN -как решение для небольших целей приложения и интересно, что это лучший способ, чтобы служить файлы непосредственно с Play, но не находится под public в каталоге приложения? Мне нужно получить доступ к FTP-загрузке.

Предположим, что мое приложение запущено из папки /home/myaccount/playapps/app201 и доступно по адресу http://somedomain.tld. У меня также есть общая учетная запись FTP с папкой, указывающей на /home/myaccount/ftp_upload.

Каков наилучший способ подавать файл /home/myaccount/ftp_upload/folder_1/sub_2/file.txt как http://somedomain.tld/ftp_upload/folder_1/sub_2/file.txt (без каких-либо проверок и ограничений)?

  • Одним из вариантов является использование HTTP-сервер и установить отдельный host или alias для ftp folder, но я хотел бы, чтобы избежать использования дополнительных серверов на некоторых узлах (ссылка:, если вы ищете серверное решение проверить sample config).
  • Вторая запись Application.serve(String filepath) action + route, но перед выполнением операций файлы мне не нужны никакие дополнительные действия. Имеет ли смысл использовать этот подход?

Есть ли другой вариант?

(этот вопрос также можно найти на Google Groups)

+1

Могу ли я попросить некоторых Детали? Часть полезности CDN - по крайней мере, по моему мнению, заключается в том, что ваши запросы не содержат файлов cookie, потому что они заполняют ненужную пропускную способность. Это часть решения, которое вы хотите, например. выполняющих динамические запросы с «www.example.com» и статических запросов (CDN) с «cdn.example.com» (или всего другого TLD)? Кроме того, большинство ваших запросов статичны (CDN) или динамические? Возможно, у вас есть грубый процент. Это также может помочь узнать, является ли ваш основной статический набор данных небольшим, например, 90% статических запросов составляют не более нескольких ГБ данных. – Carsten

+0

@ Карстен, thx для ответа. Я хочу разместить большие медиафайлы и другие «полностью публичные» вещи, кроме структуры приложения, потому что для этого мне не нужен контроль доступа. Приложение в этом случае содержит пути и метаданные, а корс - визуальный интерфейс. Моя цель может быть легко продемонстрирована с использованием интерфейсного http-сервера и псевдонима для некоторой папки [описанной здесь] (http://stackoverflow.com/a/10884297/1066240), но я хочу избежать использования HTTP-сервера. С другой стороны, я думаю, что я просто могу развернуть приложение на порту 80 и немного облегченного сервера, чтобы поймать статические запросы (будет больше ...) – biesior

+0

@Caresten: (... больше :)) Я просто понял (благодаря вам), что обслуживание этих данных из другого домена предотвратит отправку файлов cookie, что также может быть хорошим моментом для повышения производительности. – biesior

ответ

2

Если папка Play и папки FTP находятся на том же хосте, вы можете использовать государственные активы. От documentation:

Обратите внимание, что если вы определяете сопоставления активов вне «общедоступных», вам нужно сообщить об этом sbt. если вы хотите:

GET /assets/*file    controllers.Assets.at("/public", file) 
GET /liabilities/*file   controllers.Assets.at("/foo", file) 

вы должны добавить это в настройках проекта в project/Build.scala

// Add your own project settings here 
playAssetsDirectories <+= baseDirectory/"foo" 

Я не проверял, но это стоит попробовать :-)

+0

nico_ekito: thx для вашего ответа, но, к сожалению, он не может заставить его работать. Я постараюсь все еще, дам вам знать в случае каких-либо успехов. – biesior

+5

Разве это не потребует вашего собственного контроллера, так как контроллер Assets копирует и компилирует все активы вверх, т. Е. Файл должен существовать при запуске Play? Если вы загрузите файл позже, это не сработает. – nylund

Смежные вопросы