我使用Django频道和daphne服务器(ASGI)而不是典型的gunicorn(WSGI)服务器运行Django应用程序。所以我不得不修改我的应用程序:
# 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 Web应用程序,它对django服务器进行REST API调用,我收到了CORS错误。
请注意,这不是常规的CORS问题,因为当我删除新的文件包装器时,我能够从Angular正确访问我的API。
无法加载https://my-app.herokuapp.com/api/
:对预检请求的响应未通过访问控制检查:否' Access-Control-Allow-Origin'标头出现在请求的资源上。因此,不允许原始https://frontend.com
访问。
答案 0 :(得分:0)
像这样改变你的 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)