https://github.com/positiondev/skilltree
https://github.com/positiondev/skilltree
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/positiondev/skilltree
- Owner: positiondev
- Created: 2014-07-21T17:01:03.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2014-10-14T19:18:56.000Z (over 11 years ago)
- Last Synced: 2025-01-15T10:02:30.283Z (about 1 year ago)
- Language: Haskell
- Homepage:
- Size: 9.14 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Setup
The simplest way to work on SkillTree is via a virtual machine. These
instructions should work on Linux or Mac - I'm not sure how on
Windows, but should be possible.
First, install the following three packages, via whatever mechanism you have:
- virtualbox (tested on 4.3.12)
- vagrant (tested on 1.6.3)
- ansible (tested on 1.6.6)
- sshpass (for production provisioning only)
Next, move into the directory of the SkillTree source and run the following command:
vagrant up
It seems to sometimes fail out the first time after it starts to run
the provisioner, so if you see that error, just run:
vagrant provision
Provisioning is idempotent, so you can do it over and over and nothing
will change.
After that completes, you will have a running virtual machine with all the needed
libraries and binaries. The only thing left to do is to configure the Makefile to
use Vagrant. Copy `.vagrantmode.example` to `.vagrantmode`
Now run `make init` to configure the package, run `make dbup` to run
all the database migrations, and run `make run` to build and start the
application. It will start the application on port `8000`, so once it
starts up, visit `localhost:8000` in a web browser to see the
application, and when you edit the source files or templates, it'll
automatically recompile.
# Production
To set up a production deployment, first set the IP address of the
server (should be debian 7.5) in both `provisioning/inventory` and the
`Makefile`. You should already have the VM set up as above (we use the
VM to build production binaries. Not using the VM is not supported if
you want to deploy). First create the production config files. The production
database password is in the ansible vault. So first get the password.txt file
by some means, put it in the provisioning folder, and open up the vault with
ansible-vault edit --vault-password-file=provisioning/password.txt provisioning/secrets.yml
Take the database password and use it to create the prod.cfg file in
snaplets/persist and snaplets/postgresql-simple, modeling off of the
prod-sample.cfg files.
If this is a new production server, run `make production-init`. It'll
prompt you for the root password on the server (a few times). If the server
has already been set up, this step isn't needed.
Run database migrations with `make dbup PRODUCTION=1`, and deploy the
application with `make deploy`. Whenever you want to deploy a new
version, just run `make deploy`. If there is an error on startup, the
new version will not be switched to, and you can debug it by looking
at either the application logs (run `make production-log`) or the
logs for the managing process (run `make production-keter-log`).
# Haskell on your host machine
If you want to also have haskell on your development machine (in
addition to the VM), or set up development (not done yet), you can
also use ansible to do the same installs (right now only ghc and
cabal). Run
ansible-playbook -i provisioning/inventory provisioning/native.yml
From the project directory (or from anywhere else, changing the paths
to inventory and native.yml to be correct).
# Running tests
When you set up the project, it'll download selenium and the chrome
driver. Provided you have PROJDIR/.cabal-sandbox/bin in your PATH,
`make test` should set up and run the selenium tests, including
starting the server.