New version available. 4.0b2.
Changing command names around but 'serve' will still work for now.
$ wsgi-admin
Usage: wsgi-admin command [params]
Commands:
install-so
so-location
run-server
setup-server
Actually, you will not see 'setup-server' in list because I only realised
wasn't added to usage after had out up 4.0b2. There were a few usage messages I
have forgotten to update.
Anyway, instead of 'serve' use 'run-server':
wsgi-admin run-server mysite/wsgi.py --server-root apache --url-alias /static
mysite/files
Various new options.
$ wsgi-admin run-server -h
Usage: wsgi-admin run-server script [options]
Options:
-h, --help show this help message and exit
--host IP-ADDRESS
--port NUMBER
--processes NUMBER
--threads NUMBER
--callable-object NAME
--limit-request-body NUMBER
--maximum-requests NUMBER
--reload-on-changes
--user NAME
--group NAME
--document-root DIRECTORY-PATH
--url-alias URL-PATH FILE-PATH|DIRECTORY-PATH
--error-document STATUS URL-PATH
--keep-alive-timeout SECONDS
--server-status
--include-file FILE-PATH
--working-directory DIRECTORY-PATH
--daemonize
--pid-file FILE-PATH
--server-root DIRECTORY-PATH
--log-directory DIRECTORY-PATH
--log-level NAME
--access-log
--startup-log
--httpd-executable FILE-PATH
--modules-directory DIRECTORY-PATH
--mime-types FILE-PATH
--with-newrelic
--with-wdb
One of the more interesting things as far as I am concerned is the
'setup-server' command.
This will generate all the configuration for Apache, but not actually run it.
It will though generate you a command to use to start/stop/restart the Apache.
That way all the configuration is remembered. For example:
wsgi-admin setup-server mysite/wsgi.py --server-root apache --url-alias /static
mysite/files
In the 'apache' subdirectory created, you would then find:
$ ls -las apache/
total 32
0 drwxr-xr-x 6 graham wheel 204 5 Jul 15:15 .
0 drwxr-xr-x 4 graham wheel 136 5 Jul 15:15 ..
8 -rw-r--r-- 1 graham wheel 308 5 Jul 15:15 handler.wsgi
0 drwxr-xr-x 2 graham wheel 68 5 Jul 15:15 htdocs
16 -rw-r--r-- 1 graham wheel 4376 5 Jul 15:15 httpd.conf
8 -rwxr-xr-x 1 graham wheel 759 5 Jul 15:15 wsgi-server
You can then say:
apache/wsgi-server start
The Apache instance will be demonised so the command will return. To stop it:
apache/wsgi-server stop
Do note that this will not remember user environment variables set on the
command line when executing the original setup-server command.
If you were doing this to run at a later time or from a system startup script,
you can create the file 'apache/envvars' and add and export environment
variables in it. For example you might in that add:
NEW_RELIC_CONFIG_FILE=/some/path/newrelic.ini
export NEW_RELIC_CONFIG_FILE
As before any feedback or opinions if you have tried it most welcome.
Graham
On 01/07/2013, at 11:03 PM, Graham Dumpleton <[email protected]> wrote:
> After a long hiatus, as far as doing any serious work on mod_wsgi, I have
> finally been getting up the motivation to work on mod_wsgi again. I have been
> doing some refactoring of code in the core of mod_wsgi, but I have mainly
> been playing with stuff that sits around mod_wsgi which makes it easier to
> install and run, especially for local development and testing. This is all as
> a prelude to some grander ideas I have for down the track.
>
> At this time I have thrown up an early beta version of this new experiment to
> get some feedback on it and to shake out any problems with it. if you have
> the time to try it out and give me any comments you have, that would be most
> excellent.
>
> The express version of the instructions you need to try out this repackaged
> version of mod_wsgi are as follows:
>
> 1. Install it.
>
> pip install wsgi_module
>
> 2. Run it on your WSGI script file.
>
> wsgi-admin serve path/to/app.wsgi
>
> And that is all there is to it.
>
> You will now have Apache running on port 8000 with mod_wsgi hosting your WSGI
> application.
>
> Summarising some things in case you missed it.
>
> This is making mod_wsgi available as a Python package on PyPi which can be
> installed using pip. The resultant mod_wsgi.so and associated files get
> installed into the Python installation or virtual environment and not into
> your existing Apache installation.
>
> This means you do not need to have root access.
>
> What the 'wsgi-admin serve' command will do is create an Apache configuration
> file on the fly based on any options which are supplied, but otherwise it
> uses a configuration for Apache/mod_wsgi which I deem is a good configuration
> for running mod_wsgi with Apache.
>
> This means you don't have to understand how to configure Apache, I have done
> that part for you.
>
> In effect what you have at this point is the equivalent of a standalone
> Python WSGI server. It will run in the foreground and will not daemonise. If
> you really wanted it to be daemonised, then run it under supervisord. You
> will also need to use supervisord at the moment if you wanted it to run as a
> certain user if starting it automatically when your system boots.
>
> The 'wsgi-admin' script 'serve' command has a small set of options to allow
> you to do the most common things that are required when using
> Apache/mod_wsgi. The script will work out all the appropriate Apache/mod_wsgi
> configuration and do it in the appropriate way to ensure it all works fine.
>
> To get the available options run:
>
> wsgi-admin serve -h
>
> At the moment this yields.
>
> Usage: wsgi-admin serve script [options]
>
> Options:
> -h, --help show this help message and exit
> --host IP-ADDRESS
> --port NUMBER
> --processes NUMBER
> --threads NUMBER
> --callable-object NAME
> --reload-on-changes
> --document-root DIRECTORY-PATH
> --url-alias URL-PATH FILE-PATH|DIRECTORY-PATH
> --keep-alive-timeout SECONDS
> --server-status
> --include-configuration FILE-PATH
> --working-directory DIRECTORY-PATH
> --server-root DIRECTORY-PATH
> --log-directory DIRECTORY-PATH
> --httpd-executable FILE-PATH
> --modules-directory DIRECTORY-PATH
> --mime-types FILE-PATH
> --with-newrelic
> --with-wdb
>
> So documentation of the options is obviously one of the things still to be
> done, so a quick run down of a few usage scenarios.
>
> 1. Specifying the host.
>
> By default the Apache instance will listen on localhost only. This means it
> will not be accessible outside of the host it is running on. To make it
> accessible through any interface use:
>
> wsgi-admin serve app.wsgi --host 0.0.0.0
>
> 2. Changing number of processes and threads.
>
> Daemon mode is always used. It will default to a single process with 5
> threads. To change the number of processes and thread use:
>
> wsgi-admin serve app.wsgi --processes 3 --threads 10
>
> In addition to setting these for the daemon process group, the script will
> automatically calculate some values for the number of Apache child worker
> processes and threads which are proxying to the daemon process group running
> the WSGI application. This works irrespective of whether your Apache
> installation happens to be using prefork, worker or event MPM.
>
> 3. Development mode.
>
> As is usually the case with daemon mode, you can touch the WSGI script file
> and your application will be reloaded on the next request.
>
> If however you are doing development and would rather that code be
> automatically reloaded as you make changes to it, you can use:
>
> wsgi-admin serve app.wsgi --reload-on-changes
>
> That way there is no need to touch the WSGI script file or restart Apache
> manually. As with any such automatic reloading mechanism, it is only for
> development and you should not use it in production.
>
> 4. Hosting of static files at the root of the site.
>
> By default it only hosts your WSGI application. If however you have static
> files you also need to host and they need to be available from the root of
> the site, such as favicon.ico, then use:
>
> wsgi-admin serve app.wsgi --document-root path/to/files
>
> What will happen is that your WSGI application is still mounted at the root
> URL, but if when a request is received it matches a file in the document root
> directory, that file will be served up instead.
>
> In other words, if a file is found it is served. If a file can't be found,
> the request is passed to the WSGI application.
>
> 5. Hosting of static files at a sub URL of the site.
>
> It is not always the case that files are organised into a nice directory
> structure which would allow you to mount that directory at the root of the
> site using --document-root. In this case you can mount a directory at a sub
> URL instead.
>
> For example, if using Django, where static files are put together into one
> directory using the 'collectstatic' management command, but where the
> directory structure created by 'collectstatic' doesn't include a sub
> directory corresponding to the sub URL it needs to appear as on the web
> server, you can use:
>
> wsgi-admin serve mysite/wsgi.py --url-alias /static mysite/files
>
> You can use the --url-alias option more than once. The script will ensure
> that they are all ordered correctly to give the correct precedence if there
> are overlaps.
>
> 6. Want to do some performance monitoring.
>
> There is inbuilt support for New Relic. So long as you have also installed
> the Python 'newrelic' package and have signed up for New Relic (it has a free
> Lite tier), you can run:
>
> NEW_RELIC_CONFIG_FILE=newrelic.ini wsgi-admin serve app.wsgi --with-newrelic
>
> 7. Need help debugging errors from your application.
>
> There are various debuggers which allow debugging in the browser. A more
> recent one which has some advantages over others is wdb
> (https://github.com/Kozea/wdb). So long as you have the 'wdb' package
> installed you can use:
>
> wsgi-admin serve app.wsgi --with-wdb
>
> There is no need to run the separate 'wdb.server.py' command as the Apache
> configuration will be setup to automatically run it from the web server in a
> separate isolated mod_wsgi daemon group process. This way it is always
> started up and shutdown automatically for you without caring.
>
> If using Django, just note the need to set;
>
> DEBUG_PROPAGATE_EXCEPTIONS = True
>
> in your Django settings file so that exceptions are propagated back up to the
> WSGI server.
>
> 8. Change the directories where things are placed.
>
> By default a directory is created in '/tmp' to put the files which are
> generated to do all this. The directory is of the form:
>
> /tmp/apache-host:port:hid
>
> The log file is called 'error_log' in that directory.
>
> You can override that directory name using '--server-root'. You can separate
> override the directory used for the log file using '--log-directory'.
>
> So, what are the requirements for using this.
>
> In order to install it you must have Apache 2.2 or 2.4 installed on your
> system.
>
> On a Linux system, you need to have both the core Apache packages, as well as
> the corresponding 'dev' packages.
>
> For example, if using Ubuntu and you have:
>
> - apache2
> - apache2-mpm-worker
>
> you also need:
>
> - apache2-threaded-dev
>
> If you have:
>
> - apache2
> - apache2-mpm-prefork
>
> you also need:
>
> - apache2-prefork-dev
>
> You will need to work out what you need to install for your system, but if
> you have previously compiled mod_wsgi from source code, you will already have
> what you need.
>
> If you are on MacOS X Mountain Lion, you may need to fix up a bug in the
> Apple Apache/Xcode package caused by a wrong path in the Apache 'apxs'
> configuration. This is fixed by doing:
>
> cd /Applications/Xcode.app/Contents/Developer/Toolchains
> sudo ln -s XcodeDefault.xctoolchain OSX10.8.xctoolchain
>
> This will be trashed by some system updates and will need to be added back if
> that occurs.
>
> When pip is run, the setup.py will go looking for the Apache 'apxs' program
> in your PATH or '/usr/sbin'. If it isn't in your PATH or you want to use a
> different Apache installation, use:
>
> APXS=/some/other/path/bin/apxs pip install wsgi_module
>
> That should be more than enough to get you started if you are interested.
>
> Try it out for doing development, see how it goes and let me know.
>
> Overall I think I am already pretty close to where I want this, but will
> still be doing some internal code cleanups at least. If you have got any
> other ideas, or the way the Apache configuration is done will not let your
> application run, then let me know.
>
> Time to go to sleep and see what anyone comes up with tomorrow.
>
> Graham
>
>
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/groups/opt_out.