2

Я хочу создать веб-приложение, в котором интерфейс (статический) и бэкэнд (API), за исключением совместного использования одного и того же домена, полностью разделены. Обычно я считаю, что это не должно быть никаких проблем, но у меня есть некоторые специальные требования:Обслуживание Django API на Heroku и одностраничное приложение на Amazon S3 в том же домене

  • пробеги API на Heroku (с использованием Django & TastyPie)
  • все статическое содержимое, в том числе HTML файлы будут размещенных на Amazon S3

приложение внешнего интерфейса будет одной страницы приложения Javascript (с базовым шаблоном, позволяет называть его index.html) и заполнить содержимое из API через AJAX. Поскольку я не хочу внедрять CORS для API еще и хотел бы следовать политике одного и того же происхождения, я хочу, чтобы и API, и файлы на S3 (ведро) каким-то образом обменивались одним и тем же доменом. Я также не хочу использовать приложение flatpages Django или вообще визуализировать index.html через Django.

Я просмотрел Google и stackoverflow, но пока не нашел подходящего решения. Насколько я читал наивный способ (указать домен на приложение Heroku и ведро S3 как-то) невозможно. Некоторые решения я имею в виду, но не нашел источники для:

  • , если это возможно, указывая имя домена к API на Heroku и ведро S3
  • проходя некоторые варианты Heroku для визуализации HTML, который размещен на S3 (ProcFile?), Используя Django и библиотеки для S3 для получения других статических активов
  • возможно что-то делать с boto для достижения этого
  • другие совершенно разные предложения?

Пробовал ли кто-нибудь подобное раньше и может указать мне в правильном направлении?

Одно дополнение: Позже я хочу использовать что-то lile PhantomJS, чтобы сделать одностраничное приложение сканируемым. Этот вывод для сканеров должен идеально размещаться в хранилище S3.

+1

Что относительно субдоменов? bucket.domain.tld -> Ваш ковш S3. domain.tld -> Heroku. Или это против той же политики происхождения? – Jannis

+1

То же правило происхождения также распространяется на поддомены, которых я боюсь. Я думаю, что сейчас я предполагаю, что буду реализовывать CORS. –

+0

вы можете использовать JSONP для многих вещей. В прошлом я мог использовать его с перекрестными доменами. –

ответ

1

То, что не возможно с вашим текущим стеком.

Ваше приложение Heroku и ваше ведро S3 фактически обслуживаются через два разных домена. Преимущество двух разных доменов заключается в том, что вы можете выгружать сервер из всех запросов статических активов.

Сложный способ добиться того, что вы хотите, - это надлежащим образом проксировать запросы через один уникальный домен. К счастью для вас ни Heroku, ни Amazon позволит вам сделать это:

  • Nginx может рокси static папку your-api.herokuapp.com но you cannot configure nginx on Heroku, что бы поражение цели использования PaaS в первую очередь.
  • S3 can host your website и перенаправить папку api в your-api.herokuapp.com, но только с 301 переадресацией, которая не разрешает проблемы CORS.Только что попробовал его, если вам интересно:

    <RoutingRules> 
        <RoutingRule> 
        <Condition> 
         <KeyPrefixEquals>api/</KeyPrefixEquals> 
        </Condition> 
        <Redirect> 
         <HostName>your-api.herokuapp.com</HostName> 
        </Redirect> 
        </RoutingRule> 
    </RoutingRules> 
    

В этот момент простое решение заключается в реализации a Django middleware for cross-domain sharing.

+1

Спасибо за ответ. На данный момент мой подход уже изменился, и мне больше не нужно применять вышеизложенное. –