環境:ubuntu10.10(x64), python2.6
需要安裝:
apt-get install build-essential psmisc python2.6-dev libxml2 libxml2-dev python-setuptools
apt-get install libpcre3-dev build-essential libssl-dev python-pip
apt-get install mysql-server mysql-client python-mysqldb
apt-get install nginx
pip install uwsgi
pip install web.py
注意
1.安裝nginx時如果遇到"atal error: Python.h: No such file or directory"說明你需要安裝python2.6-dev
2.安裝python2.6-dev時會遇到"libssl-dev: depends: libssl0.9.8 (= 0.9.8o-1ubuntu4) but 0.9.8o-1ubuntu4 will be installed"
請到http://pkgs.org/download/libssl0.9.8下載對應的libssl包
這裏使用libssl0.9.8_0.9.8o-1ubuntu4_amd64.deb
3. 安裝mysql-server的時候,使用密碼爲123456
下載:
到http://simple-is-better.com/news/309下載基於web.py的事例
這個例子能夠幫助我們學習在部署過程中遇到的各種問題
將simple-todo放到/var/www目錄下
目錄結構如下:
|-- code.py
|-- config/
| |-- __init__.py
| |-- settings.py
| `-- url.py
|-- controllers/
| |-- __init__.py
| `-- todo.py
|-- static/
| |-- images/
| `-- styles/
| |-- index/
| | |-- images/
| | | `-- website.png
| | `-- style.css
| `-- reset.css
`-- templates/
|-- error.html
|-- foot.html
|-- header.html
|-- index.html
`-- todo/
`-- edit.html
配置:
打開/etc/nginx/conf/nginx.conf(最好做個備份先)
修改server部分,如下:
server {
#端口號,設置爲8000,防止與80衝突
listen 8000;
#域名,在未使用之前請隨便設置,此處僅討論如何在本地搭建serve
server_name localhost;
#log的存放位置
access_log /var/log/nginx_access.log;
error_log /var/log/nginx_error.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
#web site的根目錄
root /var/www/simple-todo;
index index.html index.htm;
}
下面先配置並運行一下simple-todo,之後再將其部署在Nginx上
我們有一些數據需要導入到MySQL中
使用mysql -h localhost -u root -p
>123456
進入mysql
然後創建一個新的database
>create database todo;
進入到該database
>use todo;
導入sql語句
> source /var/www/simple-todo/static/sql/todo.sql
插入成功
打開/var/www/simple-todo/config/settings.py
添加mysql的登錄密碼,修改後如下
db = web.database(dbn='mysql', db='todo', user='root', pw='123456')
現在新開一個終端,進入到simple-todo輸入python code.py
然後在瀏覽器中訪問http://127.0.0.1:8080
發現從數據庫中讀取的中文顯示爲亂碼,重新插入的數據(中文)則不會有亂碼現象
進入數據庫,進行一些修改:
show variables like 'char%';
發現charset_xx 默認爲latin1
set names 'utf8';
show variables like 'char%';
將其改爲utf8(注意不是utf-8)
將表todo清空,重新插入數據。再次訪問http://127.0.0.1:8080,一切正常
部署:
進入/var/www/simple-todo,運行
$sudo uwsgi -s 127.0.0.1:9001 -w code
這時候訪問http://127.0.0.1:8000(是8000,不是8080)
發現出錯。仔細看終端的信息提示,會發現有錯誤信息
“unable to load app 0 (mountpoint='') (callable not found or import error)”
這樣的話我們需要進入到code.py進行一下修改
我們去掉了if __name__xxx語句,這樣才能保證最終在瀏覽器中顯示正常
修改之後的代碼如下:
#!/usr/bin/env python
# coding: utf-8
from config.url import urls
import web
app = web.application(urls, globals())
application = app.wsgifunc()
參考並感謝wangfsec的文章:http://wangfsec.iteye.com/blog/977361