天天看點

記錄Uwsgi與Django成功勾搭的始末

先說明一下本人的環境:

Uwsgi版本:2.0.14(yum install安裝)

django版本:1.10.6(pip install安裝)

python版本:2.7.5(阿裡雲 centos 7自帶)

nginx版本:1.10.2(yum install安裝)

在http://chenx1242.blog.51cto.com/10430133/1904804裡面,我們已經實作了網頁打開"good bye,logan"的效果,可見Web Client <===> uWSGI <===> Python是通暢的,現在我們要調整看看django與uwsgi是否是通暢的。

首先,我們在/django這個目錄下,#django-admin.py startproject logan,建立了一個叫logan的project,然後在/django/logan/logan裡會有一個自動生成的wsgi.py,打開一看,裡面的内容如下:

1

2

3

4

5

6

7

8

9

10

<code>""</code><code>"</code>

<code>WSGI config </code><code>for</code> <code>logan project.</code>

<code>It exposes the WSGI callable as a module-level variable named ``application``.</code>

<code>For </code><code>more</code> <code>information on this </code><code>file</code><code>, see</code>

<code>https:</code><code>//docs</code><code>.djangoproject.com</code><code>/en/1</code><code>.10</code><code>/howto/deployment/wsgi/</code>

<code>import</code> <code>os</code>

<code>from django.core.wsgi </code><code>import</code> <code>get_wsgi_application</code>

<code>os.environ.setdefault(</code><code>"DJANGO_SETTINGS_MODULE"</code><code>, </code><code>"logan.settings"</code><code>)</code>

<code>application = get_wsgi_application()</code>

我們原來的目标就是測試django跟uwsgi的連結是否正常,那麼傳回到/django/logan,使用#python manage.py runserver 0.0.0.0:8000啟動django,然後打開浏覽器,在位址欄裡輸入“外網ip:8000”,看到了如下的界面:

<a href="https://s1.51cto.com/wyfs02/M00/8E/9A/wKioL1jGyNzgHV1FAABQrWeQOHw932.png" target="_blank"></a>

可見django已經啟動成功,但是前面說過了,這種方法隻能測試環境裡小規模的玩玩,完全不推薦拿去生産化境裡。是以現在我們用uwsgi在8000來啟動一下django。

首先,先停止了原來我們啟動的django。

然後,使用指令#uwsgi --http :8000 --wsgi-file logan.py,回報錯誤資訊如下:

<a href="https://s2.51cto.com/wyfs02/M02/8E/9A/wKioL1jGyjXRPgsdAABpeBjU6Lk540.png" target="_blank"></a>

出現這個錯誤,那就#yum install uwsgi-plugin-python,同時使用#uwsgi --plugin python --http-socket :8001 --wsgi-file /django/logan/logan/wsgi.py,這樣卻又出了一個新錯誤:

<a href="https://s2.51cto.com/wyfs02/M01/8E/9B/wKiom1jGzevwp06-AAEjsQaeo5Q109.png" target="_blank"></a>

提示說:ImportError: No module named logan.settings。可是當我使用python用戶端單獨測試的時候,這個語句是可以使用的,如圖:

<a href="https://s5.51cto.com/wyfs02/M01/8E/9A/wKioL1jGzmDDHlNbAABPV6E1luw469.png" target="_blank"></a>

肯多人都卡在了這種情況,這個時候我們需要換一個指令:#uwsgi --plugin python --http-socket :8001 --chdir /django/logan/ --wsgi-file /django/logan/logan/wsgi.py。然後我們在浏覽器位址欄裡輸入“外網位址:8001”就可以看到如下網頁:

<a href="https://s4.51cto.com/wyfs02/M01/8E/9B/wKiom1jGz4-DGoGDAABRv4ibA5w649.png" target="_blank"></a>

可見,我們已經通過uwsgi啟動了原本已經關閉了的django,這樣就達到了Web Client &lt;===&gt; uWSGI &lt;===&gt; Django的目的。

如果過程中出現了端口被占用的情況,比如8002端口已經被使用了:

<code>probably another instance of uWSGI is running on the same address (:8002).</code>

<code>bind(): Address already in use [core/socket.c line 764]</code>

那麼就可以使用#lsof -i:8002,然後把對應的程序幹掉就好了。

最後附贈python腳本一個,這個腳本可以顯示python的path,内容如下:

參考資料:http://www.nowamagic.net/academy/detail/1330334

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1906056