Project

General

Profile

Standalone » History » Version 4

Elmer de Looff, 2012-05-10 18:22

1 1 Jan Klopper
h1. Standalone
2 1 Jan Klopper
3 2 Elmer de Looff
µWeb's standalone mode allows you to develop, run and test your website/application without needing a web server on your local machine. This enables rapid application development and when it's time to migrate over to [[Apache]], everything will work the same way it did on here.
4 1 Jan Klopper
5 2 Elmer de Looff
When running standalone, starting and stopping the web server is done by invoking the router:
6 1 Jan Klopper
7 2 Elmer de Looff
<pre><code class="bash">
8 2 Elmer de Looff
$ python uweb_info/www/router.py 
9 2 Elmer de Looff
Usage: router.py start | stop | restart
10 2 Elmer de Looff
</code></pre>
11 1 Jan Klopper
12 2 Elmer de Looff
An argument needs to be provided to start/stop or restart the router. Providing this will initiate the obvious action.
13 1 Jan Klopper
14 2 Elmer de Looff
h2. Expanding your configuration
15 1 Jan Klopper
16 2 Elmer de Looff
The entry point for the standalone project is the [[request router]], with a few additional global variables that can be used to configure Standalone:
17 1 Jan Klopper
18 2 Elmer de Looff
<pre><code class="python">
19 2 Elmer de Looff
#!/usr/bin/python
20 2 Elmer de Looff
"""A uWeb demonstration project."""
21 1 Jan Klopper
22 2 Elmer de Looff
# uWeb Framework
23 1 Jan Klopper
import uweb
24 2 Elmer de Looff
25 2 Elmer de Looff
# Project's controller
26 2 Elmer de Looff
from uweb.uweb_info import pages
27 2 Elmer de Looff
28 3 Elmer de Looff
# uWeb configuration variables (optional)
29 2 Elmer de Looff
CONFIG = 'example.conf'
30 2 Elmer de Looff
PACKAGE = 'uweb_info'
31 2 Elmer de Looff
32 1 Jan Klopper
PAGE_CLASS = pages.PageMaker
33 1 Jan Klopper
ROUTES = (
34 2 Elmer de Looff
    ('/static/(.*)', 'Static'),
35 2 Elmer de Looff
    ('/(broken.*)', 'FourOhFour'),
36 2 Elmer de Looff
    ('/haltandcatchfire', 'MakeFail'),
37 2 Elmer de Looff
    ('/json', 'Json'),
38 2 Elmer de Looff
    ('/text', 'Text'),
39 2 Elmer de Looff
    ('/redirect/(.*)', 'Redirect'),
40 2 Elmer de Looff
    ('/OpenIDLogin', '_OpenIdInitiate'),
41 2 Elmer de Looff
    ('/OpenIDValidate', '_OpenIdValidate'),
42 2 Elmer de Looff
    ('/ULF-Challenge', '_ULF_Challenge'),
43 2 Elmer de Looff
    ('/ULF-Login', '_ULF_Verify'),
44 2 Elmer de Looff
    ('/(.*)', 'Index'))
45 1 Jan Klopper
46 1 Jan Klopper
uweb.ServerSetup()
47 2 Elmer de Looff
</code></pre>
48 1 Jan Klopper
49 2 Elmer de Looff
Compared to the request router, there are two new global variables here:
50 2 Elmer de Looff
51 2 Elmer de Looff
# @CONFIG@ is used to indicate the path for the configuration file, if there is any. This is a path to the configuration file (explained below), relative from the router path. In this router, the configuration file is a file named @example.conf@ in the same directory as the router. If there is no configuration file, this variable should be omitted.
52 4 Elmer de Looff
# @PACKAGE@ is used to indicate the package name of the project. The package name is used to group logfiles by. Logfiles will be automatically created and written to either @/var/log/underdark/$PACKAGE/@ or @~/.underdark/$PACKAGE/@, whichever is writable. If no explicit @PACKAGE@ variable is set, the name of the directory one above the router directory will be used. In the case of the example project, the router is in a directory @uweb/uweb_info/www/@, meaning that the package name is *@uweb_info@*.
53 2 Elmer de Looff
54 2 Elmer de Looff
h1. Standalone configuration
55 2 Elmer de Looff
56 2 Elmer de Looff
The standalone server can be configured to bind to a specific port, and enable/disable request logging. The following is an explicit definition of the default settings:
57 2 Elmer de Looff
58 2 Elmer de Looff
<pre><code class="ini">
59 1 Jan Klopper
[standalone]
60 2 Elmer de Looff
port = 8082
61 2 Elmer de Looff
access_logging = True
62 2 Elmer de Looff
error_logging = True
63 2 Elmer de Looff
</code></pre>
64 1 Jan Klopper
65 2 Elmer de Looff
Running the standalone web server on a different port is a matter of specifying the new port and (re)starting the process. True/Fales values can be passed along as strings, or as integers depending on your preference.
66 2 Elmer de Looff
67 2 Elmer de Looff
h2. Multiple routers on one config file
68 2 Elmer de Looff
69 2 Elmer de Looff
You can have multiple routers (in standalone mode) using a single configuration file. This can be beneficial if they share many other settings, but still need their own port allocations (because only one webserver can bind to a given port). Standalone settings can be specifically assigned to a single router module, thereby allowing multiple router configurations (as long as they have differing filenames).
70 2 Elmer de Looff
71 2 Elmer de Looff
<pre><code class="ini">
72 2 Elmer de Looff
[standalone]
73 2 Elmer de Looff
access_logging = True
74 2 Elmer de Looff
error_logging = True
75 2 Elmer de Looff
76 2 Elmer de Looff
[standalone:website]
77 2 Elmer de Looff
port = 8000
78 2 Elmer de Looff
79 2 Elmer de Looff
[standalone:admin]
80 2 Elmer de Looff
port = 8001
81 2 Elmer de Looff
access_logging = False
82 2 Elmer de Looff
</code></pre>
83 2 Elmer de Looff
84 2 Elmer de Looff
This configuration block explicitly enables logging for all routers, but then disables access logging for the @admin@ router. The @website@ router will run on port 8000, but the @admin@ router will run on port 8001.