First, make sure you have Python 2.7 installed. Web2py has not yet been ported to Python3. Even if you don't care about the web2py part of the install, the version of paverutils on pypi is still a Python 2.x package, although the development version is now at 3.x.
There are a couple of prerequisites you need to satisfy before you can build and use this eBook. The easiest/recommended way is to use pip.
If you're using a Mac, we highly recommend installing Homebrew and using it to install python (which also installs pip), rather than using the built-in installation.
You should set up a virtualenv for the app. To do that, install virtualenv and virtualenvwrapper per the linked instructions.
The easiest way to do so is to download the source code distribution from the web2py site. After you download it, extract the zip file to a folder on your hard drive (web2py requires no real "installation"). Avoid the web2py.app installation on OS X as it messes with the Python path.
Clone this repository -- that is, the RunestoneSever -- into web2py/applications
. Clone it into runestone rather than the default RunestoneServer: git clone <repo_url> runestone
All the web2py stuff is configured assuming that the application will be called runestone.
Clone the thinkcspy book into web2py/applications/runestone/books
(this is a clone of the original, modified for LaunchCode classes). Other books are available from Runestone Interactive.
You can install all dependencies by running the following command in main runestone directory. Make sure you have activated your virtualenv: pip install -r requirements.txt
-
Install postgreSQL
-
Create a database
-
Figure out your database connection string. It will be something like
postgres://username:passwd@localhost/dbname
Install the Postgres app.
In ~/.bash_profile
add:
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin
At a command line:
$ source ~/.bash_profile
$ createdb runestone
$ psql
In postgres (psql
):
> CREATE ROLE launchclass WITH LOGIN PASSWORD 'toinfinityandbeyond';
> GRANT ALL PRIVILEGES ON DATABASE runestone TO launchclass;
The following steps are unnecessary if you are installing the app locally using the same user/db settings above.
-
Tell web2py to use that database
- Create a file
applications/runestone/models/1.py
, with the following line:settings.database_uri = <your_connection_string>
- NOTE: Don't put this inside an if statement, like it shows in
models/1.prototype
- NOTE: Don't put this inside an if statement, like it shows in
- If you're running https, edit
settings.server_type
inmodels/0.py
- You will need a customization to
runestone/modules/chapternames.py
- (Note: hopefully, this will be fixed in the future so that it automatically reads from
models/1.py
) - In
chapternames.py
, where it sets the value ofdburl
to a connection string, place the value of your connection string.
- (Note: hopefully, this will be fixed in the future so that it automatically reads from
- Create a file
-
Edit
/applications/runestone/books/<yourbook>/pavement.py
- set the
master_url
variable for your server, if notlocalhost
- set the
-
Run web2py once, so that it will create all the tables (making sure you've activated your virtualenv)
cd web2py/
python web2py.py
-
cd web2py/applications/runestone/books/<your book>
-
runestone build
- At the end, it should say
trying alternative database access due to No module named pydal
and then, if things are working correctly, start outputting the names of the chapters.
- At the end, it should say
-
Deploy the book
- The following may not be necessary. Check the static directory first to see if the book contents were already moved there. From
runestone/books/<your book name>
:rm -r ../../static/<your book name>
mv build/<your book name> ../../static/
- The following may not be necessary. Check the static directory first to see if the book contents were already moved there. From
-
Create an account for yourself
- restart web2py if it's not running
- go to
runestone/appadmin
- create a course for the book
- insert new courses
- course_id can be blank
- course name should be your book name, the directory name inside books/ (no spaces)
- date is in format 2015-08-29
- institution doesn't matter
- base course should be same as course name
- create an account for yourself
- insert new auth_user
- cohort id should be "id"
- Course name should be the course name from above (not a number)
- Do not make up a registration key or a reset password key; leave them blank
- make yourself the instructor for the course
- insert new course_instructor
- Course is the number for the course (probably 5 if you just inserted one additional course)
There is an official documentation site created by the original development team.