Stack and Dependencies

GeoBlacklight

geoblacklight.org

Open-source, Ruby on Rails software application for discovery geospatial content based on the open-source software project Blacklight.

Blacklight and GeoBlacklight are unlike many Ruby on Rails applications in that they use Apache Solr as a data store rather than a relational database.

Top

Blacklight

projectblacklight.org

An open-source, Ruby on Rails engine that provides a basic discovery interface for searching an Apache Solr index, including fielded searching, applyying and removing facet constraints, sorting and paginating through search results, and more.

Top

Ruby on Rails

rubyonrails.org

Sever-side web application framework written in Ruby that uses the MVC Framework (model-view-controller). Popular websites like GitHub, Twitch, and AirBNB are built using Ruby on Rails.

Top

Bundler

bundler.io

Bundler manages an application’s dependencies through its entire life, across many machines, systematically and repeatably. Read more

Top

Apache Solr

solr.apache.org

An open-source enterprise-search platform written in Java. Features include full-text search, hit highlighting, faceted search, real time indexing, dynamic clustering, database integration, and rich document handling.

Blacklight and GeoBlacklight use Solr as a data store. Metadata is ingested and indexed in Solr.

Top

MariaDB

mariadb.org

Our production database for the application. MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system.

Top

GeoCombine

GeoCombine Repo

A Ruby toolkit for managing geospatial metadata, including:

  • tasks for cloning, updating, and indexing OpenGeoMetdata metadata
  • library for converting metadata between standards

AGSL Geodiscovery is using UWM’s fork of GeoCombine

AGSL GeoDiscovery is now up to date with the main GeoCombine repo.

This can be modified by editing the Gemfile:

# GeoCombine Latest Release
gem "geo_combine", ">= 0.9"

or

# GeoCombine via the UWM Libraries Fork
gem "geo_combine", git: "https://github.com/UWM-Libraries/GeoCombine.git", branch: "main"

Top

dotenv

repo

Shim to load environment variables from .env into ENV in development.

Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables.

But it is not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. dotenv loads variables from a .env file into ENV when the environment is bootstrapped.

Top

Bootstrap

getbootstrap.com

Open-source CSS framework directed at responsive, mobile-first front-end web development. It contains HTML, CSS and JavaScript-based design templates for typography, forms, buttons, navigation, and other interface components.

Top

Capistrano

https://capistranorb.com/

A remote server automation tool that supports the scripting and execution of arbitrary tasks and includes a set of sane-default deployment workflows.

Since we are deploying from a local computer, capistrano is not actually installed on the production machine.

Top

Sprockets

Sprockets GitHub Repo

Sprockets is a Ruby library for compiling and serving web assets. It features declarative dependency management for JavaScript and CSS assets, as well as a powerful preprocessor pipeline that allows you to write assets in languages like CoffeeScript, Sass and SCSS.

Sprockets is a gem from the RoR community that helps you to bundle your JS and CSS together in the project. It’s an old gem and it’s as of Rails version 7 being phased out. It’s the one GeoBlacklight currently uses. See the Ruby on Rails Asset Pipeline guides for more info.

Top

sqlite3

sqlite.org/

A small, fast, self-contained SQL database engine. Used in the dev and test environment as a database.

Top

Puma

Puma GitHub Repo

Web Server used for the dev and test environments

Top

Phusion Passenger

physionpassenger.com

A.K.A mod_rails and mod_rack

A free web server and application server with support for Ruby, Python, and Node.js. Used in the production environment.

Top

Advanced Search Plugin for Blacklight

Advanced Search Plugin for Blacklight Repo

This is an advanced search plugin for Blacklight.

We’re currently using a forked version of this plugin.

gem "blacklight_advanced_search", git: "https://github.com/ewlarson/blacklight_advanced_search.git", branch: "bl7-fix-gentle-hands"

We can use the main gem once this pull request is incorporated into the main repo.

Top

GeoBlacklight Sidecar Images

Repo

This GeoBlacklight plugin captures remote images from geographic web services and saves them locally. It borrows the concept of a SolrDocumentSidecar from Spotlight, to have an ActiveRecord-based “sidecar” to match each non-AR SolrDocument. This allows us to use ActiveStorage to attach images to our solr documents.

See ActiveJob , Sidekiq , and Redis below.

Top

ActiveJob

see docs

Active Job is a framework for declaring jobs and making them run on a variety of queuing backends. These jobs can be everything from regularly scheduled clean-ups, to billing charges, to mailings. Anything that can be chopped up into small units of work and run in parallel, really.

Top

Sidekiq

sidekiq.org

An open-source job scheduler written in ruby.

Top

Redis

redis.io

An in-memory data structure store, used as a distributed, in-memory-key-value database, cache, and message broker.

Top

Whenever

repo

Whenever is a Ruby gem that provides a clear syntax for writing and deploying cron jobs.

Some information about configuring Whenever can be found on the deloy page.

Top

Minitest

Minitest Docs

A complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking.

Top

Capybara

teamcapybara.github.io/capybara

System tests run via Capybara and a headless web browser, essentially loading a webpage in the background and ensuring text or CSS selectors or XPATH expressions exist on the page.

Capybara is only used in the test environment.

Top

Exception Notification

Exception Noticiation Repo

The Exception Notification gem provides a set of notifiers for sending notifications when errors occur in a Rack/Rails application. The built-in notifiers can deliver notifications by email, HipChat, Slack, Mattermost, Teams, IRC, Amazon SNS, Google Chat, Datadog or via custom WebHooks.

The Gem in Geodiscovery is currently configured to e-mail digilib@uwm.edu

Top

Dependabot

Dependabot docs

Dependabot will analyze and alert the repository administrators should any code dependencies experience a security vulnerability. It will also draft pull requests for simple security fixes in the application.

Pull requests drafted by Dependabot should be carefully tested before incorporating into the application. Certain packages (e.g. Bootstrap) can be ignored via the configuration file.

Top

Noid

Noid docs

The noid utility creates minters (identifier generators) and accepts commands that operate them. Once created, a minter can be used to produce persistent, globally unique names for documents, databases, images, vocabulary terms, etc. Properly managed, these identifiers can be used as long term durable information object references within naming schemes such as ARK, PURL, URN, DOI, and LSID. At the same time, alternative minters can be set up to produce short-lived names for transaction identifiers, compact web server session keys, and other ephemera.

We use Noid to mint ARK identifiers.

Top