Skip to content
Global Names Discovery
HTML Ruby CSS Vim script Dockerfile JavaScript Shell
Branch: master
Clone or download

Global Names Recognition and Discovery (GNRD)

DOI Continuous Integration Status Coverage Status CodePolice Dependency Status

GNRD is a web-application. It finds scientific names in texts, PDF files, images, web-pages, MS Word and MS Excel documents. RESTful API allows to search for scientific names using scripts.


There are quite a few moving parts in the system -- Tesseract for OCR, Libre Office to read various file formats, Postgresql for data, Redis for asyncronous execution of commands, gnfinder for name-finding etc. We recommend to install Docker and Docker Compose to dramatically simplify the installation process.

You can follow .travis.yml file to see necessary components for the system on a Debian-based GNU/Linux distribution. You can see docker-compose file to get an insight on how to make a complete Docker-based installation.


  • Docker >= 1.10
  • Docker Compose >= 1.6
  • Git

Install for production on one machine

Get source code and swich to production branch

git clone
cd gnrd
git checkout production

Get packages for ruby-filemagic and pg gems

sudo apt install libmagic-dev libpq-dev

Create directories for database and configuration files

sudo mkdir -p /opt/gna/data/gnrd/postgresql/data
sudo mkdir -p /opt/gna/config/gnrd
sudo chown 999:999 -R /opt/gna/data/gnrd/postgresql
sudo cp ./config/config.json.example /opt/gna/config/gnrd/config.json
sudo cp ./config/docker/gnrd.env.example /opt/gna/config/gnrd/gnrd.env

Modify config.json and gnrd.env to suit your needs (defaults are not secure, but work as well).

Optionally pull gnames/gnrd from dockerhub to save time on the gnrd docker image building step

docker pull gnames/gnrd

Run docker compose from the project's root directory

docker-compose up
# or in daemon mode:
nohup docker-compose up -d

Initialize database:

docker-compose run app rake db:reset

Now you should have a working version of GNRD on and the following command should work as expected

curl -L

You can change the placement of default directories, and ports by modifying docker-compose file

Development and Testing

You need Docker >= 1.10 and Docker Compose >= 1.6

Build application's image (needs to be done only if a new gem or new Ubuntu package are added)

docker-compose build

Start Docker Compose (in the background)

docker-compose up -d

Create/update database

docker-compose run app rake db:reset

should be sufficient

Run all tests

docker-compose run app rake

Run a specific test

# with rake
docker-compose run app rake spec SPEC=spec/lib/some_spec.rb:44

# with rspec
docker-compose run app rspec -r factories spec/lib/some_spec.rb:44

Contributing to GNRD

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
  • Fork the project
  • Start a feature/bugfix branch
  • Commit and push until you are happy with your contribution
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.


Authors: Dmitry Mozzherin, David Shorthouse

Copyright © 2012-2019 Marine Biological Laboratory. See LICENSE.txt for further details.

You can’t perform that action at this time.