MobileBlur

Hex Artifact Content
Login

Artifact dbbd6de1055b9f38f290b5143b31b016e940b2de:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 70  #!/usr/bin/env p
0010: 79 74 68 6f 6e 0a 23 20 2d 2a 2d 20 63 6f 64 69  ython.# -*- codi
0020: 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 0a 22  ng: utf-8 -*-.."
0030: 22 22 0a 73 63 67 69 68 61 6e 64 6c 65 72 2e 70  "".scgihandler.p
0040: 79 20 2d 20 68 61 6e 64 6c 65 72 20 66 6f 72 20  y - handler for 
0050: 53 43 47 49 20 70 72 6f 74 6f 63 6f 6c 0a 0a 4d  SCGI protocol..M
0060: 6f 64 69 66 69 65 64 20 62 79 20 4d 69 63 68 65  odified by Miche
0070: 6c 65 20 43 6f 6d 69 74 69 6e 69 20 3c 6d 69 63  le Comitini <mic
0080: 68 65 6c 65 2e 63 6f 6d 69 74 69 6e 69 40 67 6c  hele.comitini@gl
0090: 69 73 63 6f 2e 69 74 3e 0a 66 72 6f 6d 20 66 63  isco.it>.from fc
00a0: 67 69 68 61 6e 64 6c 65 72 2e 70 79 20 74 6f 20  gihandler.py to 
00b0: 73 75 70 70 6f 72 74 20 53 43 47 49 0a 0a 66 63  support SCGI..fc
00c0: 67 69 68 61 6e 64 6c 65 72 20 68 61 73 20 74 68  gihandler has th
00d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 70 79  e following copy
00e0: 72 69 67 68 74 3a 0a 22 20 54 68 69 73 20 66 69  right:." This fi
00f0: 6c 65 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  le is part of th
0100: 65 20 77 65 62 32 70 79 20 57 65 62 20 46 72 61  e web2py Web Fra
0110: 6d 65 77 6f 72 6b 0a 20 20 43 6f 70 79 72 69 67  mework.  Copyrig
0120: 68 74 65 64 20 62 79 20 4d 61 73 73 69 6d 6f 20  hted by Massimo 
0130: 44 69 20 50 69 65 72 72 6f 20 3c 6d 64 69 70 69  Di Pierro <mdipi
0140: 65 72 72 6f 40 63 73 2e 64 65 70 61 75 6c 2e 65  erro@cs.depaul.e
0150: 64 75 3e 0a 20 20 4c 69 63 65 6e 73 65 3a 20 4c  du>.  License: L
0160: 47 50 4c 76 33 20 28 68 74 74 70 3a 2f 2f 77 77  GPLv3 (http://ww
0170: 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e 73  w.gnu.org/licens
0180: 65 73 2f 6c 67 70 6c 2e 68 74 6d 6c 29 0a 22 0a  es/lgpl.html).".
0190: 0a 54 68 69 73 20 69 73 20 61 20 68 61 6e 64 6c  .This is a handl
01a0: 65 72 20 66 6f 72 20 6c 69 67 68 74 74 70 64 2b  er for lighttpd+
01b0: 73 63 67 69 0a 54 68 69 73 20 66 69 6c 65 20 68  scgi.This file h
01c0: 61 73 20 74 6f 20 62 65 20 69 6e 20 74 68 65 20  as to be in the 
01d0: 50 59 54 48 4f 4e 50 41 54 48 0a 50 75 74 20 73  PYTHONPATH.Put s
01e0: 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 20 74 68  omething like th
01f0: 69 73 20 69 6e 20 74 68 65 20 6c 69 67 68 74 74  is in the lightt
0200: 70 64 2e 63 6f 6e 66 20 66 69 6c 65 3a 0a 0a 73  pd.conf file:..s
0210: 65 72 76 65 72 2e 64 6f 63 75 6d 65 6e 74 2d 72  erver.document-r
0220: 6f 6f 74 3d 22 2f 76 61 72 2f 77 77 77 2f 77 65  oot="/var/www/we
0230: 62 32 70 79 2f 22 0a 23 20 66 6f 72 20 3e 3d 20  b2py/".# for >= 
0240: 6c 69 6e 75 78 2d 32 2e 36 0a 73 65 72 76 65 72  linux-2.6.server
0250: 2e 65 76 65 6e 74 2d 68 61 6e 64 6c 65 72 20 3d  .event-handler =
0260: 20 22 6c 69 6e 75 78 2d 73 79 73 65 70 6f 6c 6c   "linux-sysepoll
0270: 22 0a 0a 75 72 6c 2e 72 65 77 72 69 74 65 2d 6f  "..url.rewrite-o
0280: 6e 63 65 20 3d 20 28 0a 20 20 20 20 20 20 22 5e  nce = (.      "^
0290: 28 2f 2e 2b 3f 2f 73 74 61 74 69 63 2f 2e 2b 29  (/.+?/static/.+)
02a0: 24 22 20 3d 3e 20 22 2f 61 70 70 6c 69 63 61 74  $" => "/applicat
02b0: 69 6f 6e 73 24 31 22 2c 0a 20 20 20 20 20 20 22  ions$1",.      "
02c0: 28 5e 7c 2f 2e 2a 29 24 22 20 3d 3e 20 22 2f 68  (^|/.*)$" => "/h
02d0: 61 6e 64 6c 65 72 5f 77 65 62 32 70 79 2e 73 63  andler_web2py.sc
02e0: 67 69 24 31 22 2c 0a 29 0a 73 63 67 69 2e 73 65  gi$1",.).scgi.se
02f0: 72 76 65 72 20 3d 20 28 20 22 2f 68 61 6e 64 6c  rver = ( "/handl
0300: 65 72 5f 77 65 62 32 70 79 2e 73 63 67 69 22 20  er_web2py.scgi" 
0310: 3d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =>.             
0320: 20 20 20 20 20 28 22 68 61 6e 64 6c 65 72 5f 77       ("handler_w
0330: 65 62 32 70 79 22 20 3d 3e 0a 20 20 20 20 20 20  eb2py" =>.      
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 28 20 22 68 6f 73 74 22 20 3d 3e 20 22 31 32 37  ( "host" => "127
0360: 2e 30 2e 30 2e 31 22 2c 0a 20 20 20 20 20 20 20  .0.0.1",.       
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 20 22 70 6f 72 74 22 20 3d 3e 20 22 34 30 30 30   "port" => "4000
0390: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
03a0: 20 20 20 20 20 20 20 20 20 20 20 22 63 68 65 63             "chec
03b0: 6b 2d 6c 6f 63 61 6c 22 20 3d 3e 20 22 64 69 73  k-local" => "dis
03c0: 61 62 6c 65 22 2c 20 23 20 64 6f 6e 27 74 20 66  able", # don't f
03d0: 6f 72 67 65 74 20 74 6f 20 73 65 74 20 22 64 69  orget to set "di
03e0: 73 61 62 6c 65 22 21 0a 20 20 20 20 20 20 20 20  sable"!.        
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a                ).
0400: 20 20 20 20 29 0a 29 0a 0a 0a 0a 0a 22 22 22 0a      ).).....""".
0410: 0a 4c 4f 47 47 49 4e 47 20 3d 20 46 61 6c 73 65  .LOGGING = False
0420: 0a 53 4f 46 54 43 52 4f 4e 20 3d 20 46 61 6c 73  .SOFTCRON = Fals
0430: 65 0a 0a 69 6d 70 6f 72 74 20 73 79 73 0a 69 6d  e..import sys.im
0440: 70 6f 72 74 20 6f 73 0a 0a 70 61 74 68 20 3d 20  port os..path = 
0450: 6f 73 2e 70 61 74 68 2e 64 69 72 6e 61 6d 65 28  os.path.dirname(
0460: 6f 73 2e 70 61 74 68 2e 61 62 73 70 61 74 68 28  os.path.abspath(
0470: 5f 5f 66 69 6c 65 5f 5f 29 29 0a 6f 73 2e 63 68  __file__)).os.ch
0480: 64 69 72 28 70 61 74 68 29 0a 73 79 73 2e 70 61  dir(path).sys.pa
0490: 74 68 20 3d 20 5b 70 61 74 68 5d 2b 5b 70 20 66  th = [path]+[p f
04a0: 6f 72 20 70 20 69 6e 20 73 79 73 2e 70 61 74 68  or p in sys.path
04b0: 20 69 66 20 6e 6f 74 20 70 3d 3d 70 61 74 68 5d   if not p==path]
04c0: 0a 0a 69 6d 70 6f 72 74 20 67 6c 75 6f 6e 2e 6d  ..import gluon.m
04d0: 61 69 6e 0a 0a 23 20 75 6e 63 6f 6d 6d 65 6e 74  ain..# uncomment
04e0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20   one of the two 
04f0: 69 6d 70 6f 72 74 73 20 62 65 6c 6f 77 20 64 65  imports below de
0500: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 53  pending on the S
0510: 43 47 49 57 53 47 49 20 73 65 72 76 65 72 20 69  CGIWSGI server i
0520: 6e 73 74 61 6c 6c 65 64 0a 23 69 6d 70 6f 72 74  nstalled.#import
0530: 20 70 61 73 74 65 2e 75 74 69 6c 2e 73 63 67 69   paste.util.scgi
0540: 73 65 72 76 65 72 20 61 73 20 73 63 67 69 0a 66  server as scgi.f
0550: 72 6f 6d 20 77 73 67 69 74 6f 6f 6c 73 2e 73 63  rom wsgitools.sc
0560: 67 69 2e 66 6f 72 6b 70 6f 6f 6c 20 69 6d 70 6f  gi.forkpool impo
0570: 72 74 20 53 43 47 49 53 65 72 76 65 72 0a 0a 69  rt SCGIServer..i
0580: 66 20 4c 4f 47 47 49 4e 47 3a 0a 20 20 20 20 61  f LOGGING:.    a
0590: 70 70 6c 69 63 61 74 69 6f 6e 20 3d 20 67 6c 75  pplication = glu
05a0: 6f 6e 2e 6d 61 69 6e 2e 61 70 70 66 61 63 74 6f  on.main.appfacto
05b0: 72 79 28 77 73 67 69 61 70 70 3d 67 6c 75 6f 6e  ry(wsgiapp=gluon
05c0: 2e 6d 61 69 6e 2e 77 73 67 69 62 61 73 65 2c 0a  .main.wsgibase,.
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05f0: 20 20 20 20 20 20 20 20 6c 6f 67 66 69 6c 65 6e          logfilen
0600: 61 6d 65 3d 27 68 74 74 70 73 65 72 76 65 72 2e  ame='httpserver.
0610: 6c 6f 67 27 2c 0a 20 20 20 20 20 20 20 20 20 20  log',.          
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
0640: 6f 66 69 6c 65 72 66 69 6c 65 6e 61 6d 65 3d 4e  ofilerfilename=N
0650: 6f 6e 65 29 0a 65 6c 73 65 3a 0a 20 20 20 20 61  one).else:.    a
0660: 70 70 6c 69 63 61 74 69 6f 6e 20 3d 20 67 6c 75  pplication = glu
0670: 6f 6e 2e 6d 61 69 6e 2e 77 73 67 69 62 61 73 65  on.main.wsgibase
0680: 0a 0a 69 66 20 53 4f 46 54 43 52 4f 4e 3a 0a 20  ..if SOFTCRON:. 
0690: 20 20 20 66 72 6f 6d 20 67 6c 75 6f 6e 2e 73 65     from gluon.se
06a0: 74 74 69 6e 67 73 20 69 6d 70 6f 72 74 20 67 6c  ttings import gl
06b0: 6f 62 61 6c 5f 73 65 74 74 69 6e 67 73 0a 20 20  obal_settings.  
06c0: 20 20 67 6c 6f 62 61 6c 5f 73 65 74 74 69 6e 67    global_setting
06d0: 73 2e 77 65 62 32 70 79 5f 63 72 6f 6e 74 79 70  s.web2py_crontyp
06e0: 65 20 3d 20 27 73 6f 66 74 27 0a 0a 23 20 75 6e  e = 'soft'..# un
06f0: 63 6f 6d 6d 65 6e 74 20 6f 6e 65 20 6f 66 20 74  comment one of t
0700: 68 65 20 74 77 6f 20 72 6f 77 73 20 62 65 6c 6f  he two rows belo
0710: 77 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  w depending on t
0720: 68 65 20 53 43 47 49 57 53 47 49 20 73 65 72 76  he SCGIWSGI serv
0730: 65 72 20 69 6e 73 74 61 6c 6c 65 64 0a 23 73 63  er installed.#sc
0740: 67 69 2e 73 65 72 76 65 5f 61 70 70 6c 69 63 61  gi.serve_applica
0750: 74 69 6f 6e 28 61 70 70 6c 69 63 61 74 69 6f 6e  tion(application
0760: 2c 20 27 27 2c 20 34 30 30 30 29 2e 72 75 6e 28  , '', 4000).run(
0770: 29 0a 53 43 47 49 53 65 72 76 65 72 28 61 70 70  ).SCGIServer(app
0780: 6c 69 63 61 74 69 6f 6e 2c 20 70 6f 72 74 3d 34  lication, port=4
0790: 30 30 30 29 2e 72 75 6e 28 29 0a 0a              000).run()..