安裝uwsgi,安裝步驟如下
wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz tar zxvf uwsgi-latest.tar.gz cd <dir> python uwsgiconfig.py --build
報錯
using profile: buildconf/default.ini detected include path: ['/usr/local/include', '/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include', '/usr/include'] Traceback (most recent call last): File "uwsgiconfig.py", line 1612, in <module> build_uwsgi(uc, is_cflags, gcll=gcll) File "uwsgiconfig.py", line 280, in build_uwsgi gcc_list, cflags, ldflags, libs = uc.get_gcll() File "uwsgiconfig.py", line 983, in get_gcll elif int(k_minor) >= 25: ValueError: invalid literal for int() with base 10: '32_1'
這個報錯是因為python中int轉換字符串的時候,默認轉換的只能是數字,'32_1'顯然不是一個數字,誰能想到從官網上下載的腳本居然有bug
腫木辦呢?打開這個文件的源碼,找到983行,代碼為
if timer_mode == 'auto': if uwsgi_os == 'Linux': k_all = uwsgi_os_k.split('.') k_base = k_all[0] k_major = k_all[1] if len(k_all) > 2: k_minor = k_all[2] else: k_minor = 0 if int(k_base) > 2: timer_mode = 'timerfd' elif int(k_minor) >= 25: timer_mode = 'timerfd' else: timer_mode = 'none'
取的應該是版本號
# uname -a Linux jiu_bu_gao_su_ni 2.6.32_1-12-0-0 #1 SMP Mon Aug 12 17:59:52 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
這樣在代碼里強制加一個k_minor=32就可以了
if timer_mode == 'auto': if uwsgi_os == 'Linux': k_all = uwsgi_os_k.split('.') k_base = k_all[0] k_major = k_all[1] if len(k_all) > 2: k_minor = k_all[2] else: k_minor = 0 k_minor = 32 if int(k_base) > 2: timer_mode = 'timerfd' elif int(k_minor) >= 25: timer_mode = 'timerfd' else: timer_mode = 'none'
測試一下,安裝成功
python uwsgiconfig.py --build
把同路徑下生成的uwsgi拷貝到/usr/bin下或者/usr/sbin就可以了