1. 程式人生 > >Django 踩過的坑(二)

Django 踩過的坑(二)

最近在折騰Django的WSGI應用,雖然Django自帶的runserver很方便,但是對於複雜的功能它就無能為力了。

首先在Windows上遇到坑了,然後在windows10自帶的Ubuntu遇到坑了,最後在虛擬機器上總算解決了。

從以前的文章Django筆記《Django 學習筆記(二)第一個網頁》可以看出我用的是windows10系統中的cmd來進行Django操作的,由於gunicorn應用是在unix系統中執行的,強制性在win平臺執行就出錯了。

1.windows遇到坑:

首先 cmd中輸入:pip3 install gunicorn ,安裝成功後,切換到專案目錄(G:/Django/hello),具體操作是先切換到G盤,直接輸入G:,接著輸入cd Django\hello 就會出現 G:\Django\hello>這種情況。然後執行gunicorn,在Django專案中格式是:gunicorn yourproject.wsgi [-b 127.0.0.1.8000],括號內為選填,其他命令引數可以傳送 gunicorn -h得到幫助文件。我這邊的專案是hello,所以我的命令操作是:gunicorn hello.wsgi ,然後呢,出錯ModuleNotFoundError: No module named 'pwd',沒有pwd模組,好吧,沒有找唄。找到後的程式碼貼在下面了,把找到的pwd.py放進了python3的安裝目錄D:\Program Files\Python\Python36\Lib,接著我們再執行gunicorn hello.wsgi ,結果又出錯了:AttributeError: module 'socket' has no attribute 'AF_UNIX' ,然後我又在網上找,gunicorn是unix系統中的應用,將其用在windows上相容性是個大大的問題,如果按照錯誤一個個解決將是一個龐大的工程,所以轉戰unix系統,windows在gunicorn上棄坑。

G:\Django\hello>gunicorn hello.wsgi
Traceback (most recent call last):
  File "d:\program files\python\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\program files\python\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File 
"D:\Program Files\Python\Python36\Scripts\gunicorn.exe\__main__.py", line 5, in <module> File "d:\program files\python\python36\lib\site-packages\gunicorn\app\wsgiapp.py", line 10, in <module> from gunicorn.app.base import Application File "d:\program files\python\python36\lib\site-packages\gunicorn\app\base.py
", line 12, in <module> from gunicorn import util File "d:\program files\python\python36\lib\site-packages\gunicorn\util.py", line 13, in <module> import pwd ModuleNotFoundError: No module named 'pwd'
ModuleNotFoundError: No module named 'pwd'
from os import * 
from pwd import * 

def get_username():
    return getpwuid(getuid())[0]
pwd.py
G:\Django\hello>gunicorn hello.wsgi
Traceback (most recent call last):
  File "d:\program files\python\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\program files\python\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\Program Files\Python\Python36\Scripts\gunicorn.exe\__main__.py", line 5, in <module>
  File "d:\program files\python\python36\lib\site-packages\gunicorn\app\wsgiapp.py", line 10, in <module>
    from gunicorn.app.base import Application
  File "d:\program files\python\python36\lib\site-packages\gunicorn\app\base.py", line 13, in <module>
    from gunicorn.arbiter import Arbiter
  File "d:\program files\python\python36\lib\site-packages\gunicorn\arbiter.py", line 18, in <module>
    from gunicorn import sock, systemd, util
  File "d:\program files\python\python36\lib\site-packages\gunicorn\sock.py", line 101, in <module>
    class UnixSocket(BaseSocket):
  File "d:\program files\python\python36\lib\site-packages\gunicorn\sock.py", line 103, in UnixSocket
    FAMILY = socket.AF_UNIX
AttributeError: module 'socket' has no attribute 'AF_UNIX'
AttributeError: module 'socket' has no attribute 'AF_UNIX'

2.win10平臺自帶Ubuntu遇到的坑

win10開啟Linux系統:首先,在win10設定-->安全與更新-->針對開發人員-->開發人員模式-->打鉤,然後在控制面板-->程式個功能-->啟動或關閉windows功能-->適用於Linux的windows子系統(Bata)-->打勾,最後用管理員執行shell-->輸入cmd-->輸入bash-->按照操作下載安裝Linux。

安裝完畢後,用管理員身份shell進入cmd,輸入bash進入Linux系統。系統預設安裝的有python2.7和python3.5。python預設啟動的是python2,可以設定預設python為python3:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100  
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 200 

按照套路先安裝pip3(如果直接安裝pip是預設安裝在python2中的):sudo apt-get install python3-pip,接著用pip安裝Django:sudo pip3 install Django,最後用pip安裝gunicorn:sudo pip3 install gunicorn (現在自動安裝的版本是19.7.1)。環境安裝完畢,切換到專案地址:cd /mnt/g/Django/hello,然後輸入gunicorn hello.wsgi ,結果又出錯了。OSError: [Errno 92] Protocol not available ,後來折騰解除安裝pip發現gunicorn 依賴於python-gunicorn(19.4.5),所以解除安裝了gunicorn(19.7.1):pip3 uninstall gunicorn ,然後安裝了gunicorn(19.4.5):pip3 install gunicorn==19.4.5。然後命令gunicorn hello.wsgi 啟動成功,沒有出現Failed to find application,成功訪問了127.0.0.1:8000/admin/ 。

[email protected]:/mnt/g/Django/hello$ gunicorn hello.wsgi
[2017-07-16 15:16:25 +0800] [428] [INFO] Starting gunicorn 19.7.1
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/sock.py", line 44, in set_options
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
OSError: [Errno 92] Protocol not available

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/gunicorn", line 11, in <module>
    sys.exit(run())
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/wsgiapp.py", line 74, in run
    WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/base.py", line 203, in run
    super(Application, self).run()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/base.py", line 72, in run
    Arbiter(self).run()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/arbiter.py", line 198, in run
    self.start()
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/arbiter.py", line 157, in start
    self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds)
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/sock.py", line 180, in create_sockets
    sock = sock_type(addr, conf, log)
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/sock.py", line 32, in __init__
    self.sock = self.set_options(sock, bound=bound)
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/sock.py", line 89, in set_options
    return super(TCPSocket, self).set_options(sock, bound=bound)
  File "/usr/local/lib/python3.5/dist-packages/gunicorn/sock.py", line 46, in set_options
    if err[0] not in (errno.ENOPROTOOPT, errno.EINVAL):
TypeError: 'OSError' object is not subscriptable
OSError: [Errno 92] Protocol not available
[email protected]:/mnt/g/Django/hello$ gunicorn hello.wsgi
[2017-07-16 15:22:16 +0800] [470] [INFO] Starting gunicorn 19.4.5
[2017-07-16 15:22:16 +0800] [470] [INFO] Listening at: http://127.0.0.1:8000 (470)
[2017-07-16 15:22:16 +0800] [470] [INFO] Using worker: sync
[2017-07-16 15:22:17 +0800] [473] [INFO] Booting worker with pid: 473
Not Found: /static/admin/css/base.css
Not Found: /static/admin/css/login.css

3.虛擬機器安裝ubuntu系統,按照上面的套路,成功一次性啟動了服務。也反過來思考win10上遇到的問題,成功把坑2填上了。

相關推薦

Django

最近在折騰Django的WSGI應用,雖然Django自帶的runserver很方便,但是對於複雜的功能它就無能為力了。 首先在Windows上遇到坑了,然後在windows10自帶的Ubuntu遇到坑了,最後在虛擬機器上總算解決了。 從以前的文章Django筆記《Django 學習筆記(二)第一個網頁》可以

java使用默認線程池

true 如何 vol private popu command row 由於 ges 雲智慧(北京)科技有限公司 陳鑫 是的。一個線程不可以啟動兩次。那麽它是怎麽推斷的呢? public synchronized void start() {

spring boot 初步—— 打包載入本地jar

打包時載入本地jar,度娘提供了幾種方式,下邊是我遇到的幾種方式: 1、打包jar 有兩種方式 1) org.springframework.boot spring-boot-maven-plug

Android整合極光推送升級篇

轉載請標明出處 前言 前段時間針對整合極光推送寫了篇文章( Android整合極光推送和踩過的坑),後來提測以後發現了各種問題。一直沒時間總結一下,趁著週末有點時間,趕緊把這段時間裡針對Push這塊兒遇到的問題梳理一下。並且對上篇文章 《Android整合極光推

vue:元件之間的傳值問題

元件開發中難免會遇到子元件父元件之間以及兄弟元件之間的傳值問題。1、父元件傳值給子元件:如果父元件需要將placeholder值傳給子元件,則在父元件標籤中定義:placeholder="XXX",子元件在data中定義props:['placeholder']來接受,這樣接

django基礎知識筆記

log 技術分享 過濾 搜索 筆記 基礎 技術 http alt 一,深度搜索 二,過濾器fiter django基礎知識筆記(二)

django緩存優化

圖片 類型 world 重復 span tmp spa from cached 一、緩存目的:   1、減小過載   2、避免重復計算   3、提高系統性能 二、如何進行緩存    三、緩存類型    四、緩存粒度分類    五、緩存的設置與使用   示例一: CACHE

Django:模板template

無法 size type 查看源碼 隨機生成 ins cli 跨域 一個 將跨站請求偽造和驗證碼的東西記一下 CSRF Cross Site Request Forgery。跨站請求偽造 鏈接:GET請求;表單:POST請求 某些惡意的網站上,包含鏈接、表單、按鈕、Java

Windows Server 2012 搭建FTP伺服器的一些

    Windows Server 2012 搭建 IIS 的 FTP 伺服器被動模式連結失敗,出現 200 Type set to A. 227 Entering Passive Mode; 雲伺服器安全組已新增對應規則,伺服器防火牆已配置入站規則 20-21埠

【餓了麼】—— Vue2.0高仿餓了麼核心模組&移動端Web App專案爬 【重點突破】—— 當better-scroll 遇見Vue

 前言:上一篇專案總結介紹了頁面骨架的開發、header元件的開發,這一篇主要梳理:商品元件開發、商品詳情頁實現。專案github地址:https://github.com/66Web/ljq_eleme,歡迎Star。 goods

Django的基本使用

M — model 資料模型層 作用:方便的操作資料庫 一、連線資料庫 mysql, sqlserver, oracle….. 0.django預設只能連線關係型資料庫 1.安裝依賴的庫 可以使用的庫: (1)pymysql (2)p

【音樂App】—— Vue2.0開發移動端音樂WebApp專案爬

前言:上一篇總結了專案概況、專案準備、頁面骨架搭建、推薦頁面開發,這一篇重點梳理歌手頁面開發、歌手詳情頁。專案github地址:https://github.com/66Web/ljq_vue_music,歡迎Star。   一、歌手頁面開發--singer

boost log -- 使用心得和碰到的那些

前一篇文章boost log – 使用心得和碰到的那些坑(一) 寫了如何使用boost;;log, 這篇文章主要寫寫怎樣用boost;;log構建一個工程,目的就是讓使用者使用時忘掉log細節。 專案依賴 boost c++11 cmake 設計 為了以後擴充套

SpringBoot2.0填:elastic search 報錯{"error":{"root_cause":[{"type":"index_not_found_exception","...

執行程式碼 @GetMapping("searchAll") public ESDatas<DiskFile> searchAll(){ DiskFile diDiskFileDto = new DiskFile(); diDiskFi

【餓了麼】—— Vue2.0高仿餓了麼核心模組&移動端Web App專案爬

methods: { dropMove(el) { // console.log(el) for(let i=0; i<this.balls.length; i++) { let ball = this.bal

Django 系列部落格

Django 系列部落格(二) 前言 今天部落格的內容為使用 Django 完成第一個 Django 頁面,並進行一些簡單頁面的搭建和轉跳。 命令列搭建 Django 專案 建立純淨虛擬環境 在上一篇部落格中已經安裝好了虛擬環境,所以用虛擬環境來安裝指定版本的 Django。為了可以從頭到尾的走一遍

Django編寫RESTful API:請求和響應

歡迎訪問我的個人網站:www.comingnext.cn 前言 在上一篇文章,已經實現了訪問指定URL就返回了指定的資料,這也體現了RESTful API的一個理念,每一個URL代表著一個資源。當然我們還知道RESTful API的另一個特性就是,傳送不同的請求動作,會

Python django 入門學習系列

1 . 繫結 URL 與檢視函式 2 .使用Django模板系統 這裡主要是跟著追夢的教程自己一邊看著一邊用於實踐來寫的 步驟1:首先在 專案應用的目錄下建立一個 urls.py 檔案 在urls.py 中寫入: blog/urls.p

Android開發——整合友盟社會化分享遇到的

前言 從工作到現在遇到了整合友盟社會化分享第二個坑,整合最新的版的友盟社會化分享SDK遇見了一個之前沒有遇到過的程式錯誤 java.lang.NoClassDeFoundError:Failed r

工作中碰到的那些-安卓混合開發webview開啟連結出錯

https%3a%2f%2fmapi.alipay.com%2fgateway.do%3f_input_charset%3dutf-8%26it_b_pay%3d1d%26notify_url%3dhttp%253A%252F%252Fpay.jz-test.ganji.com%252Fpay%252Fnot