ASP.NET和MSSQL高機能分頁實例代碼。本站提示廣大學習愛好者:(ASP.NET和MSSQL高機能分頁實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是ASP.NET和MSSQL高機能分頁實例代碼正文
作為一個及格的開辟者,在當地情況下完成開辟還遠遠不敷,我們須要把Web App安排到長途辦事器上,如許,寬大用戶能力拜訪到網站。
許多做開辟的同窗把安排這件工作算作是運維同窗的任務,這類意見是完整毛病的。起首,比來風行DevOps理念,就是說,開辟和運維要釀成一個全體。其次,運維的難度,其實跟開辟質量有很年夜的關系。代碼寫得渣滓,運維再好也架不住每天掛失落。最初,DevOps理念須要把運維、監控等功效融入到開辟中。你想辦事器進級時不中止用戶辦事?那就得在開辟時斟酌到這一點。
上面,我們就來把awesome-python-webapp安排到Linux辦事器。
搭建Linux辦事器
要安排到Linux,起首得有一台Linux辦事器。要在公網上體驗的同窗,可以在Amazon的AWS請求一台EC2虛擬機(無償使用1年),或許應用國際的一些雲辦事器,普通都供給Ubuntu Server的鏡像。想在當地安排的同窗,存問裝虛擬機,推舉應用VirtualBox。
我們選擇的Linux辦事器版本是Ubuntu Server 12.04 LTS,緣由是apt太簡略了。假如你預備應用其他Linux版本,也沒有成績。
Linux裝置完成後,請確保ssh辦事正在運轉,不然,須要經由過程apt裝置:
$ sudo apt-get install openssh-server
有了ssh辦事,便可以從當地銜接到辦事器上。建議把公鑰復制到辦事器端用戶的.ssh/authorized_keys中,如許,便可以經由過程證書完成無暗碼銜接。
安排方法
在當地開辟時,我們可以用Python自帶的WSGI辦事器,然則,在辦事器上,明顯不克不及用自帶的這個開辟版辦事器。可以選擇的WSGI辦事器許多,我們選gunicorn:它用相似Nginx的Master-Worker形式,同時可以供給gevent的支撐,不消修正代碼,就可以取得極高的機能。
另外,我們還須要一個高機能Web辦事器,這裡選擇Nginx,它可以處置靜態資本,同時作為反向署理把靜態要求交給gunicorn處置。gunicorn擔任挪用我們的Python代碼,這個模子以下:
Nginx擔任分發要求:
在辦事器端,我們須要界說好安排的目次構造:
/
+- srv/
+- awesome/ <-- Web App根目次
+- www/ <-- 寄存Python源碼
| +- static/ <-- 寄存靜態資本文件
+- log/ <-- 寄存log
在辦事器上安排,要斟酌到新版本假如運轉不正常,須要回退到舊版本時怎樣辦。每次用新的代碼籠罩失落舊的文件是不可的,須要一個相似版本掌握的機制。因為Linux體系供給了軟鏈接功效,所以,我們把www作為一個軟鏈接,它指向哪一個目次,哪一個目次就是以後運轉的版本:
而Nginx和gunicorn的設置裝備擺設文件只須要指向www目次便可。
Nginx可以作為辦事過程直接啟動,但gunicorn還不可,所以,Supervisor退場!Supervisor是一個治理過程的對象,可以隨體系啟動而啟動辦事,它還時辰監控辦事過程,假如辦事過程不測加入,Supervisor可以主動重啟辦事。
總結一下我們須要用到的辦事有:
在Linux辦事器上用apt可以直接裝置上述辦事:
$ sudo apt-get install nginx gunicorn python-gevent supervisor mysql-server
然後,再把我們本身的Web App用到的Python庫裝置了:
$ sudo apt-get install python-jinja2 python-mysql.connector
在辦事器上創立目次/srv/awesome/和響應的子目次。
在辦事器上初始化MySQL數據庫,把數據庫初始化劇本schema.sql復制到辦事器上履行:
$ mysql -u root -p < schema.sql
辦事器端預備停當。
安排
用FTP照樣SCP照樣rsync復制文件?假如你須要手動復制,用一次兩次還行,一天假如安排50次不只慢、效力低,並且輕易失足。
准確的安排方法是應用對象合營劇本完成主動化安排。Fabric就是一個主動化安排對象。因為Fabric是用Python開辟的,所以,安排劇本也是用Python來編寫,異常便利!
要用Fabric安排,須要在本機(是開辟機械,不是Linux辦事器)裝置Fabric:
$ easy_install fabric
Linux辦事器上不須要裝置Fabric,Fabric應用SSH直接登錄辦事器並履行安排敕令。
下一步是編寫安排劇本。Fabric的安排劇本叫fabfile.py,我們把它放到awesome-python-webapp的目次下,與www目次平級:
awesome-python-webapp/
+- fabfile.py
+- www/
+- ...
Fabric的劇本編寫很簡略,起首導入Fabric的API,設置安排時的變量:
# fabfile.py import os, re from datetime import datetime # 導入Fabric API: from fabric.api import * # 辦事器登錄用戶名: env.user = 'michael' # sudo用戶為root: env.sudo_user = 'root' # 辦事器地址,可以有多個,順次安排: env.hosts = ['192.168.0.3'] # 辦事器MySQL用戶名和口令: db_user = 'www-data' db_password = 'www-data'
然後,每一個Python函數都是一個義務。我們先編寫一個打包的義務:
_TAR_FILE = 'dist-awesome.tar.gz' def build(): includes = ['static', 'templates', 'transwarp', 'favicon.ico', '*.py'] excludes = ['test', '.*', '*.pyc', '*.pyo'] local('rm -f dist/%s' % _TAR_FILE) with lcd(os.path.join(os.path.abspath('.'), 'www')): cmd = ['tar', '--dereference', '-czvf', '../dist/%s' % _TAR_FILE] cmd.extend(['--exclude=\'%s\'' % ex for ex in excludes]) cmd.extend(includes) local(' '.join(cmd))
Fabric供給local('...')來運轉當地敕令,with lcd(path)可以把以後敕令的目次設定為lcd()指定的目次,留意Fabric只能運轉敕令行敕令,Windows下能夠須要Cgywin情況。
在awesome-python-webapp目次下運轉:
$ fab build
看看能否在dist目次下創立了dist-awesome.tar.gz的文件。
打包後,我們便可以持續編寫deploy義務,把打包文件上傳至辦事器,解壓,重置www軟鏈接,重啟相干辦事:
_REMOTE_TMP_TAR = '/tmp/%s' % _TAR_FILE _REMOTE_BASE_DIR = '/srv/awesome' def deploy(): newdir = 'www-%s' % datetime.now().strftime('%y-%m-%d_%H.%M.%S') # 刪除已有的tar文件: run('rm -f %s' % _REMOTE_TMP_TAR) # 上傳新的tar文件: put('dist/%s' % _TAR_FILE, _REMOTE_TMP_TAR) # 創立新目次: with cd(_REMOTE_BASE_DIR): sudo('mkdir %s' % newdir) # 解壓到新目次: with cd('%s/%s' % (_REMOTE_BASE_DIR, newdir)): sudo('tar -xzvf %s' % _REMOTE_TMP_TAR) # 重置軟鏈接: with cd(_REMOTE_BASE_DIR): sudo('rm -f www') sudo('ln -s %s www' % newdir) sudo('chown www-data:www-data www') sudo('chown -R www-data:www-data %s' % newdir) # 重啟Python辦事和nginx辦事器: with settings(warn_only=True): sudo('supervisorctl stop awesome') sudo('supervisorctl start awesome') sudo('/etc/init.d/nginx reload')
留意run()函數履行的敕令是在辦事器上運轉,with cd(path)和with lcd(path)相似,把以後目次在辦事器端設置為cd()指定的目次。假如一個敕令須要sudo權限,就不克不及用run(),而是用sudo()來履行。
設置裝備擺設Supervisor
下面讓Supervisor重啟gunicorn的敕令會掉敗,由於我們還沒有設置裝備擺設Supervisor呢。
編寫一個Supervisor的設置裝備擺設文件awesome.conf,寄存到/etc/supervisor/conf.d/目次下:
[program:awesome]
command = /usr/bin/gunicorn --bind 127.0.0.1:9000 --workers 1 --worker-class gevent wsgiapp:application
directory = /srv/awesome/www
user = www-data
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups = 10
stdout_logfile = /srv/awesome/log/app.log
設置裝備擺設文件經由過程[program:awesome]指定辦事名為awesome,command指定啟動gunicorn的敕令行,設定gunicorn的啟動端口為9000,WSGI處置函數進口為wsgiapp:application。
然後重啟Supervisor後,便可以隨時啟動和停滯Supervisor治理的辦事了:
$ sudo supervisorctl reload $ sudo supervisorctl start awesome $ sudo supervisorctl status awesome RUNNING pid 1401, uptime 5:01:34
設置裝備擺設Nginx
Supervisor只擔任運轉gunicorn,我們還須要設置裝備擺設Nginx。把設置裝備擺設文件awesome放到/etc/nginx/sites-available/目次下:
server { listen 80; # 監聽80端口 root /srv/awesome/www; access_log /srv/awesome/log/access_log; error_log /srv/awesome/log/error_log; # server_name awesome.liaoxuefeng.com; # 設置裝備擺設域名 # 處置靜態文件/favicon.ico: location /favicon.ico { root /srv/awesome/www; } # 處置靜態資本: location ~ ^\/static\/.*$ { root /srv/awesome/www; } # 靜態要求轉發到9000端口(gunicorn): location / { proxy_pass http://127.0.0.1:9000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
然後在/etc/nginx/sites-enabled/目次下創立軟鏈接:
$ pwd /etc/nginx/sites-enabled $ sudo ln -s /etc/nginx/sites-available/awesome .
讓Nginx從新加載設置裝備擺設文件,不出不測,我們的awesome-python-webapp應當正常運轉:
$ sudo /etc/init.d/nginx reload
假如有任何毛病,都可以在/srv/awesome/log下查找Nginx和App自己的log。假如Supervisor啟動時報錯,可以在/var/log/supervisor下檢查Supervisor的log。
假如一切順遂,你可以在閱讀器中拜訪Linux辦事器上的awesome-python-webapp了:
假如在開辟情況更新了代碼,只須要在敕令行履行:
$ fab build $ fab deploy
主動安排完成!刷新閱讀器便可以看到辦事器代碼更新後的後果。
友誼鏈接
嫌國外網速慢的童鞋請移步網易和搜狐的鏡像站點:
http://mirrors.163.com/
http://mirrors.sohu.com/