Transfer ad-hoc setup docs to tutorial project
This commit is contained in:
parent
7d726b9f79
commit
4d35e43c15
8
Vagrantfile
vendored
Normal file
8
Vagrantfile
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- mode: ruby; -*-
|
||||||
|
|
||||||
|
Vagrant.configure("2") do |config|
|
||||||
|
|
||||||
|
# target machine runs Debian 10 "buster"
|
||||||
|
config.vm.box = "debian/buster64"
|
||||||
|
|
||||||
|
end
|
|
@ -31,6 +31,7 @@ release = '0.1'
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
|
'sphinx.ext.todo',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
@ -41,6 +42,9 @@ templates_path = ['_templates']
|
||||||
# This pattern also affects html_static_path and html_extra_path.
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||||
|
|
||||||
|
# Allow todo entries to show up.
|
||||||
|
todo_include_todos = True
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output -------------------------------------------------
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
|
||||||
|
|
194
docs/create-project.rst
Normal file
194
docs/create-project.rst
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
|
||||||
|
.. highlight:: sh
|
||||||
|
|
||||||
|
Create a New Project
|
||||||
|
====================
|
||||||
|
|
||||||
|
Now that you've setup your development environment, you're ready to create a
|
||||||
|
new Rattail-based project.
|
||||||
|
|
||||||
|
.. todo::
|
||||||
|
link to dev env setup doc here?
|
||||||
|
|
||||||
|
Note again that while Rattail is a project in itself, your app is yet another
|
||||||
|
project, which is "based" on Rattail but otherwise has a life of its own. It
|
||||||
|
is *not* a "fork" of Rattail but intsead uses Rattail as a library.
|
||||||
|
|
||||||
|
Notes About Names
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
There are some points to be made here, regarding project names.
|
||||||
|
|
||||||
|
First point has to do with the "types" of names involved. Really there are 3:
|
||||||
|
|
||||||
|
* "repo" name
|
||||||
|
* "project" name
|
||||||
|
* "package" name
|
||||||
|
|
||||||
|
What we're calling "repo" name here, refers to the so-called "slug" name for
|
||||||
|
the repo, e.g. the actual folder name for the repo on disk.
|
||||||
|
|
||||||
|
What we're calling "project" name here, refers to the "official" project name,
|
||||||
|
e.g. as it might be registered on PyPI or generally referenced in
|
||||||
|
documentation, etc.
|
||||||
|
|
||||||
|
What we're calling "package" name here, refers to the actual name of the Python
|
||||||
|
package contained within the project.
|
||||||
|
|
||||||
|
And there technically is a 4th, the "virtualenv" name. This refers to the
|
||||||
|
Python virtual environment you will create, within which you will install your
|
||||||
|
project. This virtualenv name need not be related necessarily, to your project
|
||||||
|
name, but in practice it usually would be. In some cases you may have multiple
|
||||||
|
virtualenvs and each must of course get a unique name.
|
||||||
|
|
||||||
|
Some examples will surely help.
|
||||||
|
|
||||||
|
.. todo::
|
||||||
|
should really have a table instead of lists here?
|
||||||
|
|
||||||
|
Example Project: Poser
|
||||||
|
|
||||||
|
* repo name: poser
|
||||||
|
* project name: Poser
|
||||||
|
* package name: poser
|
||||||
|
|
||||||
|
Example Project: rattail-tutorial
|
||||||
|
|
||||||
|
* repo name: rattail-tutorial
|
||||||
|
* project name: rattail-tutorial
|
||||||
|
* package name: rattut
|
||||||
|
|
||||||
|
Note how the "Poser" name is much more friendly and homogenous as compared to
|
||||||
|
the "rattail-tutorial" name, when considering all 3 "types" of names involved.
|
||||||
|
Really "rattail-tutorial" is not an example of a good name per se, but it was
|
||||||
|
given to this project for other reasons.
|
||||||
|
|
||||||
|
This sort of brings us to the second point about names, which is that they
|
||||||
|
*should* be "good" generally speaking. You ideally would want a name more like
|
||||||
|
"Poser" in that it's simple and easily recognizable, etc.
|
||||||
|
|
||||||
|
.. todo::
|
||||||
|
link to "how to name project" doc
|
||||||
|
(https://rattailproject.org/moin/LilSnippets/ProjectNaming)
|
||||||
|
|
||||||
|
Creating the Virtual Environment
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
As mentioned above, the name you give your virtual environment is really up to
|
||||||
|
you, and needn't "match" your project name etc.
|
||||||
|
|
||||||
|
Let's assume for a moment that you are creating a new project (described next)
|
||||||
|
named "Poser" - you likely will want to make a virtualenv named "poser" also::
|
||||||
|
|
||||||
|
mkvirtualenv --python=/usr/bin/python3 poser
|
||||||
|
|
||||||
|
Note that you should specify the path to your Python 3 executable, to avoid
|
||||||
|
using the "default" which is likely still Python 2 at this time.
|
||||||
|
|
||||||
|
For the sake of this tutorial, we'll be using the "rattut" env name::
|
||||||
|
|
||||||
|
mkvirtualenv --python=/usr/bin/python3 rattut
|
||||||
|
|
||||||
|
Please note that pretty much all subsequent commands shown, will assume your
|
||||||
|
virtual environment (regardless what you named it) is currently *active*. It
|
||||||
|
should be obvious when a virtualenv is active, since it should modify the shell
|
||||||
|
prompt to reflect that.
|
||||||
|
|
||||||
|
If you do need to deactivate your current virtualenv, you can do that with::
|
||||||
|
|
||||||
|
deactivate
|
||||||
|
|
||||||
|
And then to re-activate your virtualenv you do::
|
||||||
|
|
||||||
|
workon rattut
|
||||||
|
|
||||||
|
Or maybe ``workon poser`` etc., whatever named env you want to activate.
|
||||||
|
|
||||||
|
Installing Rattail Packages
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
If you're just wanting to run the rattail-tutorial app instead of creating your
|
||||||
|
own project, you can skip this step.
|
||||||
|
|
||||||
|
But in this tutorial we're showing how to do it all, and so before we can
|
||||||
|
create the tutorial project itself we must first install some Rattail packages
|
||||||
|
to our virtual environment. Well really there's just one (Tailbone) which is
|
||||||
|
needed because it contains the "rattail" scaffold, and also it depends on other
|
||||||
|
packages (namely, Pyramid) which are needed for the scaffold feature::
|
||||||
|
|
||||||
|
pip install Tailbone
|
||||||
|
|
||||||
|
Creating the Project
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Again if you're just wanting to run the rattail-tutorial app you can skip this
|
||||||
|
step.
|
||||||
|
|
||||||
|
First of all you should change directory to wherever you want to create the
|
||||||
|
actual project source folder. Rattail docs will generally assume that's at
|
||||||
|
``~/src`` in which case you should do something like::
|
||||||
|
|
||||||
|
mkdir -p ~/src
|
||||||
|
cd ~/src
|
||||||
|
|
||||||
|
Remember all that talk about names, up above? Well now you will be specifying
|
||||||
|
a *single* name when creating your project. In practice the name you provide:
|
||||||
|
|
||||||
|
* should be lower-cased
|
||||||
|
* will be used as-is for the "repo" name
|
||||||
|
* will be capitalized (and weird chars replaced) to obtain "project" name
|
||||||
|
* will be used as-is for the "package" name, except weird chars replaced by "_"
|
||||||
|
|
||||||
|
Got all that straight? If not, no worries, just try this a few times and see
|
||||||
|
what you end up with. Assuming you did want the project name "Poser" you would
|
||||||
|
run the command::
|
||||||
|
|
||||||
|
pcreate -s rattail poser
|
||||||
|
|
||||||
|
This will use the "scaffold" (basically, set of templates) which is named
|
||||||
|
"rattail" to generate a new folder containing files which define a new "Poser"
|
||||||
|
project, within the "poser" folder under current directory.
|
||||||
|
|
||||||
|
Since this tutorial project is named "rattail-tutorial" and there's no possible
|
||||||
|
way for the scaffold to know that we want to use "rattut" as the Python package
|
||||||
|
name, we had to simply "pick our poison" when generating the initial tutorial
|
||||||
|
project. In other words we did::
|
||||||
|
|
||||||
|
pcreate -s rattail rattail-tutorial
|
||||||
|
|
||||||
|
Note that per the above rules, what the scaffold assumed by default was:
|
||||||
|
|
||||||
|
* repo name was "rattail-tutorial"
|
||||||
|
* project name was "Rattail_tutorial"
|
||||||
|
* package name was "rattail_tutorial"
|
||||||
|
|
||||||
|
We'll clean that up a bit shortly, but first let's start Git tracking.
|
||||||
|
|
||||||
|
Making a Git Repo
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
We never want to start a new project without also starting a proper Git repo
|
||||||
|
for it. We will want to be able to ``git push`` the code to a central
|
||||||
|
location, e.g. GitHub or similar.
|
||||||
|
|
||||||
|
Change directory to your new project's source repo folder and then initialize::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial
|
||||||
|
git init
|
||||||
|
|
||||||
|
We also want our first commit to include all the generated code so far::
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial content as generated from project scaffold"
|
||||||
|
|
||||||
|
Now we'll establish our upstream and do our first push. How exactly you go
|
||||||
|
about this may vary, and certainly the commands shown here will *not* work for
|
||||||
|
you as-is, since your "origin" at least will need to be different::
|
||||||
|
|
||||||
|
git remote add origin git@rattailproject.org:/srv/git/rattail-tutorial.git
|
||||||
|
git push --set-upstream origin master
|
||||||
|
|
||||||
|
And finally, at least in the case of this tutorial project, we wanted to go
|
||||||
|
through and clean up some of the generated names, as well as assign authorship
|
||||||
|
and project description etc. within the ``setup.py`` file. (Then commit those
|
||||||
|
changes and do another push, so we again have "clean" git status.)
|
|
@ -1,15 +1,59 @@
|
||||||
.. rattail-tutorial documentation master file, created by
|
|
||||||
sphinx-quickstart on Fri Aug 16 21:39:33 2019.
|
|
||||||
You can adapt this file completely to your liking, but it should at least
|
|
||||||
contain the root `toctree` directive.
|
|
||||||
|
|
||||||
Welcome to rattail-tutorial's documentation!
|
Rattail Tutorial
|
||||||
============================================
|
================
|
||||||
|
|
||||||
|
First of all, welcome to Rattail!
|
||||||
|
|
||||||
|
This project is a tutorial of sorts, to show how to use Rattail in the real
|
||||||
|
world. (It is accordingly named 'rattail-tutorial'.)
|
||||||
|
|
||||||
|
While it aims to cover many areas, this tutorial is not exhaustive. This
|
||||||
|
project's goals include:
|
||||||
|
|
||||||
|
* show how to setup your development environment
|
||||||
|
* show how to create a new project
|
||||||
|
* show how to get your project up and running, i.e. with a database and web app
|
||||||
|
* show how to customize and extend your app in various ways, to suit your needs
|
||||||
|
* show how to integrate with another system (CORE-POS) in a custom way
|
||||||
|
* provide a "working example" of all documented concepts
|
||||||
|
|
||||||
|
That last one means, you can install and run the rattail-tutorial app yourself,
|
||||||
|
and e.g. further customize it to get a feel for Rattail.
|
||||||
|
|
||||||
|
Please see `https://rattailproject.org/docs/rattail-tutorial/
|
||||||
|
<https://rattailproject.org/docs/rattail-tutorial/>`_ for the latest version of
|
||||||
|
this document.
|
||||||
|
|
||||||
|
|
||||||
|
Front Matter
|
||||||
|
------------
|
||||||
|
|
||||||
|
It will be helpful to understand a few things before you get started:
|
||||||
|
|
||||||
|
**Rattail itself is a "library" more than it is an "app".** The idea is that the
|
||||||
|
Rattail Project will provide "most" of the base functionality you need from an
|
||||||
|
app, but ultimately you must create a project of your own, which "uses" Rattail
|
||||||
|
functionality to accomplish *your* goals.
|
||||||
|
|
||||||
|
**Rattail docs always refer to "your" app with the name "Poser".** In fact this
|
||||||
|
tutorial will *not* be using the name "Poser" (much) - but that is usually what
|
||||||
|
you will see in all *other* docs, to represent "your" (i.e. any custom) app.
|
||||||
|
|
||||||
|
**This "rattail-tutorial" project is a proper app.** Following from the
|
||||||
|
previous point, this project/app is named "rattail-tutorial" and therefore
|
||||||
|
instead of using the name "Poser" within this tutorial, we will be using its
|
||||||
|
*actual* name.
|
||||||
|
|
||||||
|
|
||||||
|
Table of Contents
|
||||||
|
-----------------
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Contents:
|
|
||||||
|
|
||||||
|
setup-dev
|
||||||
|
create-project
|
||||||
|
start-docs
|
||||||
|
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
|
|
275
docs/setup-dev.rst
Normal file
275
docs/setup-dev.rst
Normal file
|
@ -0,0 +1,275 @@
|
||||||
|
|
||||||
|
.. highlight:: sh
|
||||||
|
|
||||||
|
Setup Development Environment
|
||||||
|
=============================
|
||||||
|
|
||||||
|
These are the main requirements for a development environment, as pertains to
|
||||||
|
Rattail:
|
||||||
|
|
||||||
|
* Linux (Debian-ish)
|
||||||
|
* Git
|
||||||
|
* Python (3.x)
|
||||||
|
* virtualenvwrapper
|
||||||
|
* PostgreSQL
|
||||||
|
|
||||||
|
Technically it's possible for you to work around some of these, but not all.
|
||||||
|
However this tutorial will assume that all these requirements are met.
|
||||||
|
|
||||||
|
Now we'll go through these requirements in more detail, and how to satisfy each
|
||||||
|
one.
|
||||||
|
|
||||||
|
Linux
|
||||||
|
-----
|
||||||
|
|
||||||
|
So, the operating system upon which production Rattail software runs, is
|
||||||
|
generally assumed to be `Linux`_. To the author's knowledge, this holds true
|
||||||
|
across all existing production installs.
|
||||||
|
|
||||||
|
.. _Linux: https://en.wikipedia.org/wiki/Linux
|
||||||
|
|
||||||
|
There is technically one exception to this: the Rattail "File Monitor service"
|
||||||
|
(which is the Windows equivalent of the Rattail "File Monitor daemon" on Linux)
|
||||||
|
of course does run (only) on Windows, and has been used heavily in production.
|
||||||
|
But one of its primary tasks is usually just to move files (e.g. which emanate
|
||||||
|
from POS system) over to the "real" Rattail server on Linux somewhere.
|
||||||
|
|
||||||
|
It is possible that you could run a full Rattail stack on Windows (or MacOS for
|
||||||
|
that matter?), e.g. with PostgreSQL database and web app, possibly even
|
||||||
|
datasync etc. However there is no effort put toward supporting that currently,
|
||||||
|
so again Linux is assumed here.
|
||||||
|
|
||||||
|
Now that we've established Linux, we go a bit further and specify
|
||||||
|
"Debian-ish" - in practice the only two distros used so far, are `Debian`_ and
|
||||||
|
`Ubuntu`_. You are encouraged to use a "stable" version here, regardless of
|
||||||
|
which distro you prefer. It's likely other distros would work also, as far as
|
||||||
|
just running the app(s); however some of Rattail's "configuration management"
|
||||||
|
utilities (use of which is of course optional) are built with Debian/Ubuntu in
|
||||||
|
mind.
|
||||||
|
|
||||||
|
.. _Debian: https://www.debian.org/
|
||||||
|
.. _Ubuntu: https://ubuntu.com/
|
||||||
|
|
||||||
|
The "where" question is worth mentioning here too. In practice a production
|
||||||
|
Rattail server can be either a bare-metal machine running on your local
|
||||||
|
network, or indeed a "virtual" machine running either locally or in the cloud.
|
||||||
|
Whether you run locally or in the cloud usually will depend on other factors,
|
||||||
|
e.g. if the app must integrate directly with a POS system then it probably must
|
||||||
|
run on the local network. (And of course you can always run in "both" places,
|
||||||
|
with datasync keeping everything flowing smoothly between them.)
|
||||||
|
|
||||||
|
Setting It Up
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
In this tutorial we will be using `Vagrant`_ to spin up a local Debian Linux
|
||||||
|
virtual machine (VM) with `VirtualBox`_ as the "provider". This is primarily
|
||||||
|
so we can show an example which you could reproduce on your end, but also one
|
||||||
|
which could stay "isolated" and not interfere with any other stuff you may have
|
||||||
|
going on.
|
||||||
|
|
||||||
|
.. _Vagrant: https://www.vagrantup.com/
|
||||||
|
.. _VirtualBox: https://www.virtualbox.org/
|
||||||
|
|
||||||
|
First thing then, will be to install VirtualBox and Vagrant if you do not
|
||||||
|
already have them. You must install these to your "bare-metal development"
|
||||||
|
machine, i.e. your laptop.
|
||||||
|
|
||||||
|
Once those are in place, you can use the ``Vagrantfile`` which comes with this
|
||||||
|
(rattail-tutorial) project, to create a new VM. Note that this VM does not
|
||||||
|
come with any special behavior, it's as "vanilla" as possible.
|
||||||
|
|
||||||
|
Here is the contents of this ``Vagrantfile`` in case you need to create your
|
||||||
|
own, outside of the rattail-tutorial project:
|
||||||
|
|
||||||
|
.. literalinclude:: ../Vagrantfile
|
||||||
|
:language: ruby
|
||||||
|
|
||||||
|
Change to the directory which contains your ``Vagrantfile`` and then run
|
||||||
|
``vagrant up``, e.g.::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial
|
||||||
|
vagrant up
|
||||||
|
|
||||||
|
Those commands assume your "host" machine (i.e. your laptop) runs Linux too,
|
||||||
|
though of course that may not be so. Please adjust accordingly.
|
||||||
|
|
||||||
|
Confirming It Works
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
There are really two things you should check, to confirm "all is well"
|
||||||
|
regarding your new Linux machine, regardless of whether it's a Vagrant VM, or
|
||||||
|
some bare-metal machine.
|
||||||
|
|
||||||
|
**Check #1** - Can you open a console terminal for the machine? If it's
|
||||||
|
bare-metal then this probably just means making sure the keyboard and/or mouse
|
||||||
|
are working, and you can login. If it's virtual then this probably means
|
||||||
|
making sure you can ssh into it. (You may want to use ssh even if it's
|
||||||
|
bare-metal, depending on its role etc.)
|
||||||
|
|
||||||
|
**Check #2** - Are you able to use ``sudo`` for elevated privileges? If the
|
||||||
|
Check #1 passed then you should be able to run e.g. ``sudo whoami`` on the
|
||||||
|
terminal. It's okay to be prompted for a password as long as you know what
|
||||||
|
that is. ;) Otherwise this check fails.
|
||||||
|
|
||||||
|
Note that if you're using Vagrant, you should be able to do ``vagrant ssh`` in
|
||||||
|
order to connect, and from there ``sudo`` should be no problem.
|
||||||
|
|
||||||
|
Git
|
||||||
|
---
|
||||||
|
|
||||||
|
This one's pretty obvious and you may already have it, but we'll cover it
|
||||||
|
anyway to be thorough.
|
||||||
|
|
||||||
|
Setting It Up
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Install with::
|
||||||
|
|
||||||
|
sudo apt install -y git
|
||||||
|
|
||||||
|
But we'll also want to define your Git user identity, e.g.::
|
||||||
|
|
||||||
|
git config --global user.name "John Doe"
|
||||||
|
git config --global user.email "john@example.com"
|
||||||
|
|
||||||
|
Confirming It Works
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This should work as expected::
|
||||||
|
|
||||||
|
git --version
|
||||||
|
|
||||||
|
Also these should output the same values as you defined above::
|
||||||
|
|
||||||
|
git config --global user.name
|
||||||
|
git config --global user.email
|
||||||
|
|
||||||
|
Python
|
||||||
|
------
|
||||||
|
|
||||||
|
Since we're assuming Linux here (e.g. on the Vagrant VM), you probably already
|
||||||
|
have Python installed. However we do want to make sure you have Python 3.x -
|
||||||
|
since Python 2 is EOL quite soon as of this writing.
|
||||||
|
|
||||||
|
Setting It Up
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
To make sure you have Python 3.x, run the following command::
|
||||||
|
|
||||||
|
sudo apt install -y python3
|
||||||
|
|
||||||
|
Confirming It Works
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
You should now be able to confirm a Python 3.x binary with this command::
|
||||||
|
|
||||||
|
python3 --version
|
||||||
|
|
||||||
|
You probably also should find out where exactly this binary lives::
|
||||||
|
|
||||||
|
which python3
|
||||||
|
|
||||||
|
The output from that most likely points to ``/usr/bin/python3`` but please make
|
||||||
|
a note of your location if it's different.
|
||||||
|
|
||||||
|
Misc. Other Dependencies
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
These don't really fit any other category, and aren't *necessarily* required,
|
||||||
|
depending on your project etc. But they're often necessary and we might as
|
||||||
|
well install them just in case::
|
||||||
|
|
||||||
|
sudo apt install -y build-essential
|
||||||
|
|
||||||
|
virtualenvwrapper
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The `virtualenvwrapper`_ package is, in this author's opinion, quite useful for
|
||||||
|
both Rattail development, as well as production installs. For this reason,
|
||||||
|
this tutorial will assume its presence, even though technically Rattail does
|
||||||
|
not require it.
|
||||||
|
|
||||||
|
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/en/latest/
|
||||||
|
|
||||||
|
Setting It Up
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Before actually installing virtualenvwrapper, let's prep our "workon home"
|
||||||
|
directory. This tutorial assumes, as do all Rattail docs, that the workon home
|
||||||
|
resides at ``/srv/envs`` - again you're free to use another location, but all
|
||||||
|
docs will assume that one. These commands should prep the workon home folder
|
||||||
|
(adjust path and/or username as needed)::
|
||||||
|
|
||||||
|
sudo mkdir /srv/envs
|
||||||
|
sudo chown you:you /srv/envs
|
||||||
|
|
||||||
|
Note that for development it's often convenient to make this folder owned by
|
||||||
|
"you" whereas in production installs the author recommends making this folder
|
||||||
|
owned by a special "rattail" system user.
|
||||||
|
|
||||||
|
Now for virtualenvwrapper itself. There are technically a few ways to go about
|
||||||
|
this, but for the sake of the tutorial we'll just do this::
|
||||||
|
|
||||||
|
sudo apt install -y virtualenvwrapper
|
||||||
|
|
||||||
|
Next you must add the following to your ``~/.bashrc`` file::
|
||||||
|
|
||||||
|
export WORKON_HOME=/srv/envs
|
||||||
|
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
|
||||||
|
|
||||||
|
And finally you must "re-run" your ``.bashrc`` so these things actually take
|
||||||
|
effect for your current session::
|
||||||
|
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
Confirming It Works
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
First of all just to be 100% sure, you ideally should reboot your new machine,
|
||||||
|
or perhaps at least logout and then login again.
|
||||||
|
|
||||||
|
But really the check here, is to make sure the following command runs okay::
|
||||||
|
|
||||||
|
workon --help
|
||||||
|
|
||||||
|
PostgreSQL
|
||||||
|
----------
|
||||||
|
|
||||||
|
Rattail uses `PostgreSQL`_ exclusively, for its "primary" database backend. So
|
||||||
|
whereas Rattail can interact with many other types of SQL databases, it uses
|
||||||
|
Postgres for its "own" database(s).
|
||||||
|
|
||||||
|
.. _PostgreSQL: https://www.postgresql.org/
|
||||||
|
|
||||||
|
Technically the database is optional, depending on how you need to use Rattail,
|
||||||
|
although it is required for the web app.
|
||||||
|
|
||||||
|
Setting It Up
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
There are really two aspects of this setup, a) Postgres proper, and b) Python
|
||||||
|
support for Postgres.
|
||||||
|
|
||||||
|
We'll tackle the first aspect, well, first::
|
||||||
|
|
||||||
|
sudo apt install -y postgresql
|
||||||
|
|
||||||
|
Next we'll tackle the second aspect::
|
||||||
|
|
||||||
|
sudo apt install -y libpq-dev
|
||||||
|
|
||||||
|
Confirming It Works
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
As with the setup for Postgres, there are really two things to check here.
|
||||||
|
|
||||||
|
First, is the PostgreSQL service running and available? You should be able to
|
||||||
|
confirm that with (should output list of databases)::
|
||||||
|
|
||||||
|
sudo -u postgres psql -l
|
||||||
|
|
||||||
|
Second, is Python support for Postgres installed correctly?
|
||||||
|
|
||||||
|
.. todo::
|
||||||
|
what else should we say about the second aspect here? other than, TBD
|
||||||
|
(aka. "when you need it you'll know")
|
122
docs/start-docs.rst
Normal file
122
docs/start-docs.rst
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
|
||||||
|
.. highlight:: sh
|
||||||
|
|
||||||
|
Documenting Your Project
|
||||||
|
========================
|
||||||
|
|
||||||
|
At this point we assume you already have created a new project, and established
|
||||||
|
the Git repo for it etc.
|
||||||
|
|
||||||
|
Now we'll walk through the steps for creating documentation for your project.
|
||||||
|
We won't get too far in the weeds here but will seek to establish a foundation
|
||||||
|
to which you can easily add later.
|
||||||
|
|
||||||
|
The reason we cover docs so early in the game, is because as this tutorial
|
||||||
|
project itself is being built, the docs in practice will come before most of
|
||||||
|
the app code. So we are just documenting steps as we encounter them, while
|
||||||
|
building the tutorial.
|
||||||
|
|
||||||
|
Install Sphinx
|
||||||
|
--------------
|
||||||
|
|
||||||
|
As is typical for Python projects, the docs we maintain within our project will
|
||||||
|
use `Sphinx`_, which in turn uses `reStructuredText`_ for the primary syntax.
|
||||||
|
Sphinx offers a lot of convenience, and is configurable, can be extended etc.
|
||||||
|
|
||||||
|
.. _Sphinx: https://www.sphinx-doc.org/
|
||||||
|
.. _reStructuredText: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
||||||
|
|
||||||
|
You may not yet have Sphinx installed to your virtualenv, but we can fix that
|
||||||
|
now. Run this command just to be sure::
|
||||||
|
|
||||||
|
pip install rattail[docs]
|
||||||
|
|
||||||
|
Sphinx Quickstart
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Sphinx comes with a "quickstart" command, which you can use to walk through the
|
||||||
|
process of creating a new documentation folder.
|
||||||
|
|
||||||
|
First change directory to your project's source repo folder, then run the
|
||||||
|
quickstart command like so. Note, this will create a 'docs' folder::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial
|
||||||
|
sphinx-quickstart --project rattail-tutorial docs
|
||||||
|
|
||||||
|
You will be prompted for a few things, mostly you can use the default option or
|
||||||
|
provide some basic answer to each, and it will work out okay.
|
||||||
|
|
||||||
|
Before you go any further you may want to consider committing the generated
|
||||||
|
docs code as-is, to help keep track of changes *you* make from there::
|
||||||
|
|
||||||
|
git add docs
|
||||||
|
git commit -m "Initial docs as generated by sphinx-quickstart"
|
||||||
|
|
||||||
|
Building the Docs
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
With the above steps complete, you should have a basic docs folder with some
|
||||||
|
minimal default content, in reStructuredText format.
|
||||||
|
|
||||||
|
These docs must be "built" which generates HTML (or other formats) from the
|
||||||
|
reST source. This is how you'll (re-)build docs from now on::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial/docs
|
||||||
|
make html
|
||||||
|
|
||||||
|
This will generate HTML within the ``_build`` folder underneath the docs
|
||||||
|
folder. You can then view these docs e.g. with::
|
||||||
|
|
||||||
|
firefox _build/html/index.html
|
||||||
|
|
||||||
|
Note that each time docs are built, it tries to avoid re-building things which
|
||||||
|
haven't changed since last build. It sometimes may be helpful to "clean" the
|
||||||
|
docs build, i.e. wipe it out so the next build is forced to rebuild
|
||||||
|
everything::
|
||||||
|
|
||||||
|
make clean
|
||||||
|
make html
|
||||||
|
|
||||||
|
Now if you check your git status, you'll probably see the ``_build`` folder is
|
||||||
|
considered "untracked" by git. However we don't want git to concern itself
|
||||||
|
with this folder at all, so we should ignore that, e.g. by doing::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial
|
||||||
|
echo 'docs/_build/' >> .gitignore
|
||||||
|
git add .gitignore
|
||||||
|
git commit -m "Ignore docs build folder"
|
||||||
|
|
||||||
|
And finally, there is another gotcha which you won't notice until you clone
|
||||||
|
your project's source repo to another location, and try to build docs there.
|
||||||
|
It's not a real big deal, but you may see a warning when the docs are building,
|
||||||
|
such as:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
copying static files... WARNING: html_static_path entry '.../src/rattail-tutorial/docs/_static' does not exist
|
||||||
|
|
||||||
|
To prevent that, we'll add a stub file to our repo which will ensure that
|
||||||
|
folder always exists::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial
|
||||||
|
mkdir -p docs/_static
|
||||||
|
touch docs/_static/.keepme
|
||||||
|
git add docs/_static/.keepme
|
||||||
|
git commit -m "Add stub file to prevent docs build warning"
|
||||||
|
|
||||||
|
Writing Some Docs!
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Again it may not make sense for you to do much of this, at this point in the
|
||||||
|
game.
|
||||||
|
|
||||||
|
But while building this tutorial, all docs written up to this point have *not*
|
||||||
|
been part of the project's docs repo proper, but rather were created as simple
|
||||||
|
ad-hoc text files. So our next step is simply to "transfer" all docs content
|
||||||
|
created thus far, from these ad-hoc files, into the project docs folder.
|
||||||
|
|
||||||
|
This was a pretty manual process, then at the end we commit all changes::
|
||||||
|
|
||||||
|
cd ~/src/rattail-tutorial
|
||||||
|
git add docs
|
||||||
|
git commit -m "Transfer ad-hoc setup docs to tutorial project"
|
Loading…
Reference in a new issue