程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> ASP.NET和MSSQL高機能分頁實例代碼

ASP.NET和MSSQL高機能分頁實例代碼

編輯:MSSQL

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代碼,這個模子以下:

2015430121016418.png (487×128)

Nginx擔任分發要求:

2015430121039437.png (457×265)

在辦事器端,我們須要界說好安排的目次構造:

/
+- srv/
   +- awesome/       <-- Web App根目次
      +- www/        <-- 寄存Python源碼
      |  +- static/  <-- 寄存靜態資本文件
      +- log/        <-- 寄存log

在辦事器上安排,要斟酌到新版本假如運轉不正常,須要回退到舊版本時怎樣辦。每次用新的代碼籠罩失落舊的文件是不可的,須要一個相似版本掌握的機制。因為Linux體系供給了軟鏈接功效,所以,我們把www作為一個軟鏈接,它指向哪一個目次,哪一個目次就是以後運轉的版本:

2015430121102755.png (640×522)

而Nginx和gunicorn的設置裝備擺設文件只須要指向www目次便可。

Nginx可以作為辦事過程直接啟動,但gunicorn還不可,所以,Supervisor退場!Supervisor是一個治理過程的對象,可以隨體系啟動而啟動辦事,它還時辰監控辦事過程,假如辦事過程不測加入,Supervisor可以主動重啟辦事。

總結一下我們須要用到的辦事有:

  •     Nginx:高機能Web辦事器+擔任反向署理;
  •     gunicorn:高機能WSGI辦事器;
  •     gevent:把Python同步代碼釀成異步協程的庫;
  •     Supervisor:監控辦事過程的對象;
  •     MySQL:數據庫辦事。

在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了:

2015430121102755.png (640×522)

假如在開辟情況更新了代碼,只須要在敕令行履行:

$ fab build
$ fab deploy

主動安排完成!刷新閱讀器便可以看到辦事器代碼更新後的後果。
友誼鏈接

嫌國外網速慢的童鞋請移步網易和搜狐的鏡像站點:

http://mirrors.163.com/

http://mirrors.sohu.com/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved