Почему SSE работает локально, но не работает при размещении на IIS?
Я использую Django eventstream для SSE и Channels (я не могу использовать Memurai или Redis). Когда я запускаю локальный сервер, все работает отлично. Пользователь может отправить файл, эта информация сравнивается с внешним сторонним API, который он вызывает, и информация в реальном времени отображается обратно в браузер из /events/ URL API.
При настройке через IIS все работает отлично, за исключением того, что URL /events/ недоступен (404), поэтому SSE соединение не инициируется, что останавливает все на своем пути, и я смотрю на пустой шаблон, который должен заполняться в реальном времени.
WebApp размещается только в локальной сети.
Я пытался использовать Daphne с различными ошибками:
daphne mysite.asgi:application:
Traceback (most recent call last):
File "C:\Python\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Python\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\Python\Scripts\daphne.exe\__main__.py", line 7, in <module>
File "C:\Python\lib\site-packages\daphne\cli.py", line 170, in entrypoint
cls().run(sys.argv[1:])
File "C:\Python\lib\site-packages\daphne\cli.py", line 232, in run
application = import_by_path(args.application)
File "C:\Python\lib\site-packages\daphne\utils.py", line 12, in import_by_path
target = importlib.import_module(module_path)
File "C:\Python\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "C:\inetpub\wwwroot\mysite\.\mysite\asgi.py", line 15, in <module>
from myapp1.routing import ws_urlpatterns
File "C:\inetpub\wwwroot\mysite\.\myapp1\routing.py", line 2, in <module>
from .consumers import WSConsumer
File "C:\inetpub\wwwroot\mysite\.\myapp1\consumers.py", line 19, in <module>
from . import views
File "C:\inetpub\wwwroot\mysite\.\myapp1\views.py", line 10, in <module>
from myapp1 import myapp1_alarm_delete
File "C:\inetpub\wwwroot\mysite\.\myapp1\myapp1_alarm_delete.py", line 30, in <module>
from myapp1.models import myapp1User
File "C:\inetpub\wwwroot\mysite\.\myapp1\models.py", line 4, in <module>
class myapp1User(models.Model):
File "C:\Python\lib\site-packages\django\db\models\base.py", line 108, in __new__
app_config = apps.get_containing_app_config(module)
File "C:\Python\lib\site-packages\django\apps\registry.py", line 253, in get_containing_app_config
self.check_apps_ready()
File "C:\Python\lib\site-packages\django\apps\registry.py", line 135, in check_apps_ready
settings.INSTALLED_APPS
File "C:\Python\lib\site-packages\django\conf\__init__.py", line 82, in __getattr__
self._setup(name)
File "C:\Python\lib\site-packages\django\conf\__init__.py", line 63, in _setup
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Поэтому я пытаюсь использовать daphne settings.configure()
C:\inetpub\wwwroot\mysite>daphne settings.configure()
Traceback (most recent call last):
File "C:\Python\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Python\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\Python\Scripts\daphne.exe\__main__.py", line 7, in <module>
File "C:\Python\lib\site-packages\daphne\cli.py", line 170, in entrypoint
cls().run(sys.argv[1:])
File "C:\Python\lib\site-packages\daphne\cli.py", line 232, in run
application = import_by_path(args.application)
File "C:\Python\lib\site-packages\daphne\utils.py", line 11, in import_by_path
module_path, object_path = path.split(":", 1)
ValueError: not enough values to unpack (expected 2, got 1)
Asgi.py
import os
import django
from django.core.asgi import get_asgi_application
from myApp1.routing import ws_urlpatterns
from django.conf import settings
from django.conf.urls import url
import django_eventstream
from mysite.settings import DEBUG
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
application = ProtocolTypeRouter({
'http': URLRouter([
url(r'^events/', AuthMiddlewareStack(
URLRouter(django_eventstream.routing.urlpatterns)
), { 'channels': ['test'] }),
url(r'', get_asgi_application()),
]),
})
Settings.py
В вашем файле asgi в верхней части должно быть следующее
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
django.setup()
...
...
...