Django ASGI Новая реликвия CORS Ошибка Heroku
Я использую приложение Django, использующее каналы Django и сервер daphne (ASGI) вместо обычного сервера gunicorn (WSGI). Поэтому мне пришлось изменить свое приложение к этому:
# asgi.py
import os
import django
from channels.routing import get_default_application
from asgiref.wsgi import WsgiToAsgi
from django.core.wsgi import get_wsgi_application
from newrelic import agent
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
django.setup()
application = agent.WSGIApplicationWrapper(get_wsgi_application())
application = WsgiToAsgi(application)
К моему удивлению, это действительно работает. Когда я получаю доступ к своему django api из браузера или почтальона, он работает правильно, и данные отображаются в New Relic. Однако у меня также есть клиентское веб-приложение Angular, которое выполняет вызовы REST API к серверу django, и я получаю ошибки CORS.
Обратите внимание, что это не является обычной проблемой CORS, так как, когда я удаляю новую оболочку реликвии, я могу правильно получить доступ к своему API из Angular.
Ошибка загрузки https://my-app.herokuapp.com/api/
: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: На запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". происхождения https://frontend.com
поэтому не разрешен доступ.
1 ответ
Измените свой файл asgi.py примерно так
from django.core.asgi import get_asgi_application
import newrelic.agent #import newrelic agent
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
django_asgi_app = get_asgi_application()
from django.conf import settings
newrelic_config_file = settings.BASE_DIR + "/newrelic.ini" #location of your newrelic.ini file
newrelic.agent.initialize(newrelic_config_file) #initialise agent
application = newrelic.agent.ASGIApplicationWrapper(django_asgi_app)