Skip to content
This repository has been archived by the owner. It is now read-only.


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Build Status Code Climate

LilyPond mini-score engraving and sharing service for musicians.

The live Tunefl service is at

More sleep lost by tiredpixel.


The primary method of development installation is using Docker. You can also use this as a basis for production installation, but you'll probably want to change some things, if so.

You can also install manually, by installing the linked services and packages defined in Dockerfile & Dockerfile.worker, using bundle install, and running services using the supplied Procfile.

The default Ruby version supported is defined in .ruby-version. Any other versions supported are defined in .travis.yml.


Various versions will probably work. I'm currently using:

# docker --version
Docker version 1.9.1, build a34a1d5
# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

Note that --x-networking will no longer be preview in Docker Compose 1.6, so this flag might not be necessary for you.


Copy and configure your settings:

cp .env.example .env


Start the postgres service:

docker-compose --x-networking up -d postgres

Connect using psql:

docker exec -it tunefl_postgres_1 psql -U postgres

Create the database:

CREATE ROLE tunefl_dev LOGIN PASSWORD 'password';
CREATE DATABASE tunefl_dev OWNER tunefl_dev;

Start the web service:

docker-compose --x-networking up -d web

Migrate the database:

docker exec tunefl_web_1 bundle exec rake db:migrate

Stop all services:

docker-compose stop


Start all services:

docker-compose --x-networking up

Open the web service in a browser:

xdg-open "http://$(docker-compose port web 8080)"

Open the web service admin area in a browser:

xdg-open "http://$(docker-compose port web 8080)/admin"

Monitor the queue using Sidekiq Spy:

docker exec -it tunefl_worker_1 sh \
    -c 'TERM=xterm bundle exec sidekiq-spy -h tunefl_redis_1.tunefl -n resque'


Create multiple stacks as required; the main one in installation is suitable for a dev stack, and you can build on this. You'll probably also want to create a test stack, following similar steps. One approach is to:

Add an alias to your shell; for Bash:

echo "alias docker-compose-stack='docker-compose -f docker-compose.\$STACK.yml -p \$STACK'" >> ~/.bashrc
source ~/.bashrc

Copy and configure a different settings file (here I'm using 0 as a separator as Docker Compose currently strips -_.):

cp .env.example .tunefl0test.env

Copy the Docker Compose file, modifying to point to your .tunefl0test.env:

cp docker-compose.yml docker-compose.tunefl0test.yml

Thereafter, execute docker-compose commands using docker-compose-stack. I prefer to be explicit and use a subshell, as a protection against forgetting which stack I'm using; e.g. to start all services:

(export STACK=tunefl0test; docker-compose-stack up)

To run all tests:

docker exec tunefl0test_web_1 bundle exec rspec

Tests are written using RSpec. There are not many tests, because the application is very simple. If generating a score from the home page works, then things are probably okay.

Stay Tuned

You can become a watcher on GitHub. And you can become a stargazer if you are so minded. :D


Contributions are welcome! Please fork the repository and prepare your patches in one or more branches, ensuring that any tests are not broken by the changes. Then, send me one or more pull requests. Proposed patches will then be reviewed prior to acceptance, usually into master branch. If you'd like to discuss something, then please get in touch.

Do whatever makes you happy. We'll probably still like you. :)


May you find peace, and help others to do likewise.


Copyright © 2012-2016 tiredpixel. See LICENSE.txt.


LilyPond mini-score engraving and sharing service for musicians.







No packages published