Assembl is an Open Source application that enables hundreds or even thousands of people to work together effectively on the definition of new ideas. The application supports the belief that with the proper conditions, people working together can think smarter than any one member of the group could alone. Traditional collective intelligence software tends to refine ideas from one person. Assembl is different. It focuses on co-building new ideas.
Assembl is made with the following technologies :
Assembl is developed by Imagination For People and bluenove
Prerequisites
-
On Mac OS X 10.9.2: The system python is incompatible with the clang 5.1. You need to remove all occurences of
-mno-fused-madd
in/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_sysconfigdata.py
. Also renew (or delete) the corresponding.pyc
,.pyo
files. -
For production on linux using nginx/uwsgi you need the following ppa (for both saucy and raring): apt-add-repository ppa:chris-lea/uwsgi
-
Ruby does not like libreadline6, which comes on newer Ubuntus. Make sure you have libreadline-gplv2-dev instead of libreadline6-dev.
You need fabric 1.5.1 and a ssh server installed:
The system python has an old but serviceable pip version. It can be updated with
sudo pip install -U pip
If you have Homebrew installed, and you want to use the Homebrew python, pip installs with python:
brew install python
Either way, you should use pip to install fabric:
pip install -U fabric
Then, you need to install libiodbc. You can get it from MacPorts, or we maintain a package that you can install directly. That package was built on Yosemite; on an older system you way want to build from source. We are using version 3.52.9, with this MacPorts patch applied:
--- iodbcinst/unicode.h.orig
+++ iodbcinst/unicode.h
@@ -77,6 +77,7 @@
#ifndef _UNICODE_H
#define _UNICODE_H
+#include <sys/types.h>
#if defined (__APPLE__) && !defined (MACOSX102) && !defined (HAVE_CONFIG_H)
#define HAVE_WCHAR_H
You can get all that you need to bootstrap with:
apt-get install fabric git openssh-server
And then:
wget https://raw.github.com/ImaginationForPeople/assembl/develop/fabfile.py
fab devenv:projectpath=~/assembl install_builddeps
fab devenv:projectpath=~/assembl bootstrap
cd ~/assembl
or
git clone https://github.com/ImaginationForPeople/assembl.git
cd assembl
fab devenv install_builddeps
fab devenv bootstrap_from_checkout
Running
Note: memcached and redis must be running already.
cd ~/assembl
Only the first time you run it:
source venv/bin/activate
supervisord
#(wait for virtuoso to start)
Creating a user the first time you run assembl (so you have a superuser):
assembl-add-user --email your_email@email.com --name "Your Name" --username desiredusername --password yourpassword development.ini
(NOTE: Just running $venv/bin/supervisord will NOT work, as celery will run command line tools, thus breaking out of the environment. You need to run source venv/bin/activate from the same terminal before running the above)
On subsequent runs, just make sure supervisord is running.
Then, start the development server and compass with this command:
supervisorctl start dev:
Multiple environments
If you want to run multiple environments on your machine, you should have different values for various parameters in development.ini
.
In that case, you would copy it to a local.ini
file, and customize the values there; substitute local.ini
for development.ini
in the rest of the instructions in this file.
Once you create your local.ini, re-run the fab devenv app_setup
step.
The variables that have to be different between instances are the following (for convenience they are marked with UNIQUE_PER_SERVER in the ini file):
[app:main]
public_port = 6543
changes.socket = ipc:///tmp/assembl_changes/0
changes.websocket.port = 8085
celery_tasks.imap.broker.broker = redis://localhost:6379/0
celery_tasks.notification_dispatch.broker = redis://localhost:6379/1
[server:main]
port = 6543
[virtuoso]
port = 5132
http_port = 8892
Most of these are ports, and it should be easy to find an unoccupied port; in the case of changes.socket
, you simply need a different filename, and in the case of celery_task.*.broker
, the final number has to be changed to another low integer.
Updating an environment
cd ~/assembl
#Any git operations (ex: git pull)
fab devenv app_compile
$venv/bin/supervisorctl start dev:*
You can monitor any of the processes, for example pserve, with these commands:
$venv/bin/supervisorctl tail -f dev:pserve
$venv/bin/supervisorctl tail -f dev:pserve stderr
In production:
#(Instead of dev:*. You may have to stop dev:*)
$venv/bin/supervisorctl start prod:*
Updating an environment after switching branch locally (will regenerate css, all compiled files, update dependencies, database schema, etc.):
fab devenv app_compile
Updating an environment to it's specified branch, tag or revision:
cd ~/assembl
fab devenv app_fullupdate
Upgrade to latest manally:
alembic -c development.ini upgrade head
Create a new one:
alembic -c development.ini revision -m "Your message"
Make sure to verify the generated code...
Autogeneration (--autogenerate) isn't supported since we don't have full reflextion support in virtuoso's sqlalchemy driver.
Only the first time you run it:
cp testing.ini.example testing.ini
assembl-db-manage testing.ini bootstrap
Thereafter:
supervisord
#(wait for virtuoso to start)
py.test --cov assembl assembl
Typically when developping a specific test:
py.test assembl -s -k name_of_test --pdb
pshell development.ini
isql-vt localhost:5132 dba dba
If you use vagrant, we have a few processes that expect to use socket files in %(here)s. Vagrant does not allow creating sockets in a shared folder; so if you insist on using vagrant, make sure to move sockets locations. There is one is supervisord.conf, and one in an unkonwn location.
See (doc/localization.md)