先說明一下本人的環境:
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 <===> uWSGI <===> 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