## Please edit system and help pages ONLY in the master wiki!
## For more information, please see MoinMoin:MoinDev/Translation.
##master-page:Unknown-Page
##master-date:Unknown-Date
#acl -All:write Default
#format wiki
#language en

= Using MoinMoin with Twisted =

[[http://twistedmatrix.com/trac/wiki|Twisted]] is an event-driven networking framework for many kinds of applications.
For MoinMoin Twisted is used as a web server that just imports MoinMoin persistently. This has the advantage that the Python interpreter and all Python scripts (including Twisted itself and also MoinMoin) is only loaded and initialized one time, and that data can be cached in memory from request to request, enhancing the performance of MoinMoin.


 . /!\ First do ../BasicInstallation and ../WikiInstanceCreation.

Besides the general installation you need 3 files: 

 1. the script {{{/path/to/cgi-dir/mointwisted}}} (see "Starting the server" below)
 1. the webserver script file like {{{mointwisted.py}}} (which needs to be in the same directory where your working directory is).
 1. the configuration file like  {{{/path/to/wikiconfig-dir/wikiconfig.py}}}

<<TableOfContents>>

== Install Twisted ==

First, install Twisted (see URL above). Many Linux distributions have Twisted packages. Please refer to the documentation of Twisted for installation information.

== Configuring the Twisted server ==

Copy the file `wiki/server/mointwisted.py` to your wiki directory. Edit and adapt the settings to your needs.

=== System path configuration ===

If you did a standard install, and you are not a developer, you probably want to skip this section. Otherwise, you might want to add the path to moin and config file, like that:

{{{
sys.path.insert(0, '/path/to/moin')
sys.path.insert(0, '/path/to/wikiconfig')
}}}

=== Config class options ===

If you did a standard install, the default options might be just what you need. Check and change what you like:

|| '''Option''' || '''Default''' || '''Comment''' ||
|| docs || '/usr/share/moin/wiki/htdocs' || Path to moin shared files ||
|| user || 'www-data' || If you run as root, the server will run as this user ||
|| group || 'www-data' || If you run as root, the server will run as this group ||
|| port || 8080 || Port to serve. To serve a privileged port below 1024 you will have to run as root ||
|| interfaces || `['']` || A list of interfaces the server will listen to. If the list contains the entry `''` (like for the default configuration), all other entries are ignored and the server will listen to all interfaces. ||
|| logPath || 'mointwisted.log' || Log file. ||
|| profiler || commented python code || Useful only if you are a moin developer. ||

== Configuring wikiconfig.py ==

The sample config file should be just fine.

Don't change `url_prefix_static` as the default value is hardcoded in the Twisted server.

== Starting the server ==

=== on Unix ===

On GNU/Linux, Mac OS X or another POSIX-like OS, copy `wiki/server/mointwisted` to your wiki directory. You might want to adapt `PYTHONPATH` and the path to `twistd`. 

Start the server with {{{./mointwisted start}}} and test your wiki at http://localhost:8080/. Stop the server with {{{./mointwisted stop}}}.

For more options run {{{./mointwisted}}} without arguments.

If you want to start the server via initscript make sure {{{mointwisted}}} finds {{{montwisted.py}}} on startup! 


=== on Windows ===

Copy `wiki/server/mointwisted.cmd` to your wiki directory. You might have to change the path pointing to the python-scripts directory.

Double click `mointwisted.cmd` to start the server. It will create a new terminal window. To stop the server, close the terminal window.

==== A windows service runner written in Python ====
[[https://twitter.com/zhangchunlin|I]] have written a service runner to help configuring a windows service to run, because I prefer to run moin using Twisted.

Usage:
 1. install pywin32
 1. download servicerunner.py
 1. modify the "mointwisted" and "mointwisted_dir" according to your system
 1. run "servicerunner.py install" on the command line

[[attachment:servicerunner.py]]
