Настройка WSGI для обслуживания одного файла index.html для одностраничного приложения - PullRequest
0 голосов
/ 08 марта 2019

У меня есть стандартное приложение Django, настроенное с использованием WSGI на Apache2 (Ubuntu 18.04)

Теперь я хочу обслуживать весь интерфейсный контент в одном файле index.html (по-прежнему позволяя получить доступ к URL-адресу / admin иобеспечение работы REST api через / api).Я использую Ember для одностраничного приложения.

Любая помощь очень ценится!

Вот моя текущая настройка .conf:

DocumentRoot /var/www/examplesite.co.uk/public_html

Alias /static /home/someuser/djangoprojects/someuser_v1_project/static
<Directory /home/someuser/djangoprojects/someuser_v1_project/static>
      Require all granted
</Directory>

Alias /media /home/someuser/djangoprojects/someuser_v1_project/media
<Directory /home/someuser/djangoprojects/someuser_v1_project/media>
      Require all granted
 </Directory>

 <Directory /home/someuser/djangoprojects/someuser_v1_project/someuser_v1_project>
 <Files wsgi.py>
        Require all granted
 </Files>
 </Directory>

 WSGIDaemonProcess examplesite.co.uk python-home=/home/someuser/virtualenvs/someuser_env python-path=/home/someuser/djangoprojects/someuser_v1_project
 WSGIProcessGroup examplesite.co.uk
 WSGIScriptAlias / /home/someuser/djangoprojects/someuser_v1_project/someuser_v1_project/wsgi.py

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Поскольку ваш index.html будет статическим, его просто нужно отправить пользовательскому агенту (браузеру) как есть.Не требует какой-либо обработки на стороне сервера (WSGI).

Веб-сервер может просто отправить index.html (и любые ресурсы js / css) по запросу браузера.Он даже не должен находиться в том же каталоге, что и ваш API-интерфейс.

Я использую такую ​​настройку в производственном приложении.Это обеспечивает независимость разработки и развертывания для передней / задней части.

/www
  /myapp                <-- ember SPA (where normal users will go)
     index.html
    /assets
    /fonts
  /myapp_backend
    /api/v1/...          <-- backend API (API that ember talks to)
    /admin/              <-- admin section

Вы можете определить местоположение API бэкенда в настройках производства ember config.(Могут быть разные настройки в разработке).Затем вы можете установить для этого пространства имен в вашем адаптере данных приложения ember этот путь.

// config/environment.js
...
APP: {
  ENV: {
         REST_API_ENDPOINT: 'myapp_backend/api/v1',
         REST_API_HOST:     'http://production-host',
       ...
       }

  ...
}

// app/adapters/application.js
import DS from 'ember-data';
import ENV from '../config/environment';
...

export default DS.RESTAdapter.extend({
    namespace: ENV.APP.REST_API_ENDPOINT,
    host:      ENV.APP.REST_API_HOST,
    ...
})

Когда релиз будет готов, вы можете ember build --environment=production и скопировать каталог 'dist' в каталог myapp на сервере.

0 голосов
/ 08 марта 2019

Вам гораздо лучше не использовать WSGI / ngnix для обслуживания статических ресурсов полностью отделенного приложения веб-интерфейса и использовать службу типа Netlify или размещать ресурсы в AWS с помощью ember-cli-deploy http://ember -cli-deploy.com .

Почему?

  • Это быстрее
  • Вы можете проще автоматизировать развертывание в любом приложении
  • Вам не нужно задумываться над этим вопросом
  • Netlify, в частности, предлагает такие вещи, как предварительный просмотр развертывания, которые сделают вашу жизнь радостью.

Если вы хотитеконкретный ответ, я бы проверил это: https://pypi.org/project/wsgi-static-middleware/

...