244 lines
6.6 KiB
ReStructuredText
244 lines
6.6 KiB
ReStructuredText
|
|
||
|
Installing on Windows
|
||
|
=====================
|
||
|
|
||
|
Here we describe the prerequisites etc. for a Rattail install on Windows.
|
||
|
|
||
|
|
||
|
Installing Python
|
||
|
-----------------
|
||
|
|
||
|
There are surely lots of ways to install Python on Windows, and these
|
||
|
steps are not necessarily "superior" to other methods, if you know
|
||
|
what you're doing. But they do have the benefit of being relatively
|
||
|
well-tested in production environments.
|
||
|
|
||
|
|
||
|
32 bit vs. 64 bit
|
||
|
~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
In some cases, your Rattail app(s) may need to load and invoke code
|
||
|
from various compiled libraries. The most common scenario is that the
|
||
|
app needs to read data from an ODBC connection which uses a binary
|
||
|
driver.
|
||
|
|
||
|
Sometimes these libraries are only available in a 32 bit version. If
|
||
|
this is the case for you then you must install 32 bit Python, even on
|
||
|
a 64 bit machine.
|
||
|
|
||
|
.. note::
|
||
|
The above statements "used to be true" but it's been a while since
|
||
|
I had my head in that game, and much may have changed.
|
||
|
|
||
|
|
||
|
Python
|
||
|
~~~~~~
|
||
|
|
||
|
First of course you'll need Python itself, available at
|
||
|
`<https://www.python.org/downloads/windows/>`_.
|
||
|
|
||
|
You are encouraged to download the latest version available, although
|
||
|
in practice older versions will have received more production testing
|
||
|
in the wild. At least, it probably should be 3.6 or later.
|
||
|
|
||
|
Remember to watch for the distinction between 32 bit and 64 bit, if
|
||
|
applicable (see above).
|
||
|
|
||
|
Download the appropriate installer and run it. If there is an option
|
||
|
to add Python to your ``PATH`` variable, it's recommended that you do
|
||
|
so.
|
||
|
|
||
|
At this point you should be able to open a (new!) command line and
|
||
|
confirm ``python.exe`` is usable:
|
||
|
|
||
|
.. code-block:: none
|
||
|
|
||
|
C:\>python --version
|
||
|
Python 3.7.3
|
||
|
|
||
|
|
||
|
If that doesn't work, you may need to manually add e.g.
|
||
|
``C:\Python37;C:\Python37\Scripts`` to your `PATH environment
|
||
|
variable`_.
|
||
|
|
||
|
.. _PATH environment variable: http://www.computerhope.com/issues/ch000549.htm
|
||
|
|
||
|
|
||
|
Python for Windows Extensions
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
The situation on Windows is a little more complicated, and the short
|
||
|
version is that you must also install Mark Hammond's "Python for
|
||
|
Windows Extensions" package, available at
|
||
|
`<https://github.com/mhammond/pywin32/releases>`_.
|
||
|
|
||
|
The specific version you download should match the version of Python
|
||
|
you installed, above. Again pay attention to 32 bit vs. 64 bit if
|
||
|
applicable.
|
||
|
|
||
|
Run the installer; all defaults are fine.
|
||
|
|
||
|
|
||
|
Pip
|
||
|
~~~
|
||
|
|
||
|
If you just downloaded a fresh copy of Python (above), then you should
|
||
|
already have a copy of pip. If you are working with an older install
|
||
|
of Python etc. it is possible that you may not yet have pip. Open a
|
||
|
command line to find out:
|
||
|
|
||
|
.. code-block:: none
|
||
|
|
||
|
C:\>pip --version
|
||
|
pip 21.1.3 from C:\Python37\lib\site-packages (python 3.7)
|
||
|
|
||
|
If that doesn't work (but ``python --version`` does) then you probably
|
||
|
need to install pip. The recommended method is via the ``get-pip.py``
|
||
|
script according to `these instructions`_.
|
||
|
|
||
|
.. _these instructions: https://pip.pypa.io/en/latest/installing.html#install-pip
|
||
|
|
||
|
|
||
|
Installing Rattail
|
||
|
------------------
|
||
|
|
||
|
See :doc:`common` for more background but if you're just after the
|
||
|
filemon service then you probably only need to do this:
|
||
|
|
||
|
.. code-block:: sh
|
||
|
|
||
|
pip install rattail
|
||
|
|
||
|
|
||
|
File Monitor Setup
|
||
|
------------------
|
||
|
|
||
|
With the above in place we now can register the filemon as a proper
|
||
|
Windows service.
|
||
|
|
||
|
But before we do so we should add some basic config files for it.
|
||
|
This is because the Windows service has a hard-coded place to look for
|
||
|
config, so the service will fail to start if the config is not there.
|
||
|
|
||
|
|
||
|
File Monitor Config
|
||
|
~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
First create a folder at ``C:\ProgramData\rattail``.
|
||
|
|
||
|
Then create a file at ``C:\ProgramData\rattail\rattail.conf`` with
|
||
|
contents like:
|
||
|
|
||
|
.. code-block:: ini
|
||
|
|
||
|
############################################################
|
||
|
#
|
||
|
# rattail config
|
||
|
#
|
||
|
############################################################
|
||
|
|
||
|
|
||
|
##############################
|
||
|
# rattail
|
||
|
##############################
|
||
|
|
||
|
[rattail]
|
||
|
production = true
|
||
|
|
||
|
[rattail.config]
|
||
|
include = \\my-rattail-server\rattail\config\site.conf
|
||
|
winsvc.RattailFileMonitor = C:\ProgramData\rattail\filemon.conf
|
||
|
|
||
|
|
||
|
##############################
|
||
|
# logging
|
||
|
##############################
|
||
|
|
||
|
[handler_file]
|
||
|
args = (r'C:\ProgramData\rattail\log\rattail.log', 'a', 1000000, 20, 'utf_8')
|
||
|
|
||
|
|
||
|
Then create a file at ``C:\ProgramData\rattail\filemon.conf`` with
|
||
|
contents like:
|
||
|
|
||
|
.. code-block:: ini
|
||
|
|
||
|
############################################################
|
||
|
#
|
||
|
# filemon config
|
||
|
#
|
||
|
############################################################
|
||
|
|
||
|
|
||
|
##############################
|
||
|
# rattail
|
||
|
##############################
|
||
|
|
||
|
[rattail.config]
|
||
|
include = C:\ProgramData\rattail\rattail.conf
|
||
|
|
||
|
[rattail.filemon]
|
||
|
monitor =
|
||
|
first
|
||
|
second
|
||
|
third
|
||
|
|
||
|
first.dirs = C:\folders\first
|
||
|
first.actions = copy, delete
|
||
|
first.action.copy.func = rattail.files:locking_copy
|
||
|
first.action.copy.args = \\my-rattail-server\rattail\files\incoming\first
|
||
|
first.action.delete.func = os:remove
|
||
|
|
||
|
second.dirs = C:\folders\second
|
||
|
second.actions = copy, delete
|
||
|
second.action.copy.func = rattail.files:locking_copy
|
||
|
second.action.copy.args = \\my-rattail-server\rattail\files\incoming\second
|
||
|
second.action.copy.retry_attempts = 6
|
||
|
second.action.copy.retry_delay = 10
|
||
|
second.action.delete.func = os:remove
|
||
|
second.stop_on_error = true
|
||
|
|
||
|
third.dirs = C:\folders\third
|
||
|
third.watch_locks = true
|
||
|
third.actions = custom, backup
|
||
|
third.action.custom.func = poser.filemon_actions:my_custom_func
|
||
|
third.action.custom.args = foo
|
||
|
third.action.backup.func = rattail.files:overwriting_move
|
||
|
third.action.backup.args = C:\folders\third\backup
|
||
|
|
||
|
|
||
|
##############################
|
||
|
# logging
|
||
|
##############################
|
||
|
|
||
|
[handler_file]
|
||
|
args = (r'C:\ProgramData\rattail\log\filemon.log', 'a', 1000000, 20, 'utf_8')
|
||
|
|
||
|
|
||
|
Registering the Service
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
Note that this must be done in an Administrator console!
|
||
|
|
||
|
.. code-block:: sh
|
||
|
|
||
|
rattail filemon install --auto-start --username rattail
|
||
|
|
||
|
You are encouraged to use ``rattail`` for the username, but any will
|
||
|
do if you have another preference.
|
||
|
|
||
|
One common pattern is to have a shared site-wide config provided by
|
||
|
the "real" Rattail server (presumed to be Linux), which is "included"
|
||
|
by this machine's config. An example of this is shown above within
|
||
|
the ``rattail.conf`` file.
|
||
|
|
||
|
The user which the filemon service runs as, must have access to any
|
||
|
shares provided by other machines, where it needs to read/write files
|
||
|
etc.
|
||
|
|
||
|
Note that to *unregister* the filemon service, you can do:
|
||
|
|
||
|
.. code-block:: sh
|
||
|
|
||
|
rattail filemon remove
|