Tornado Web サーバーで Django を使用するにはどうすればよいですか?
4 に答える
とてもシンプルです (特に django 1.4 の場合)。
1 - django プロジェクト (およびアプリ) をビルドし、正常に動作することを確認します。
django-admin.py startproject
2-ルートフォルダー(使用したのと同じディレクトリ)に新しいpythonファイルを作成します
3- 次に、以下のコードをコピーし、os.environ['DJANGO_SETTINGS_MODULE']
行を編集して、その新しい .py ファイルに貼り付けます。
import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import sys
import django.core.handlers.wsgi
#sys.path.append('/home/lawgon/') # path to your project ( if you have it in another dir).
def main():
os.environ['DJANGO_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module
application = django.core.handlers.wsgi.WSGIHandler()
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
Django 1.6 以降では、次のようになります。
import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
from django.core.wsgi import get_wsgi_application
def main():
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # path to your settings module
application = get_wsgi_application()
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
あなたを助けるtornado-proxyと呼ばれるプロジェクトがあります。ただし、Nginxを使用することをお勧めします。Nginx構成で、proxy_passを使用して次のように呼び出しを送信できるようになりました。
location /comet {
proxy_pass http://localhost:8081;
}
location / {
proxy_pass http://localhost:8080;
}
現実の世界では、Django と本番対応の Web サーバーをWSGIに接続します。このデモは、異なる URL プレフィックスを提供する 1 つの Python モジュールから Tornado (および Web サーバー) と Django を並べて実行する方法を示しています: https://github.com/bdarnell/django-tornado-demo。ただし、Tornado は、Django に向けられたリクエストの処理をブロックします。