Stack and Dependencies
- ActiveJob
- Advanced Search Plugin
- Apache Solr
- Blacklight
- Bootstrap
- Bundler
- Capistrano
- Capybara
- Dependabot
- dotenv
- Exception Notification
- GeoBlacklight
- GeoBlacklight Sidecar Images
- GeoCombine
- MariaDB
- Minitest
- Noid
- Passenger
- Puma
- Redis
- Ruby on Rails
- Sidekiq
- Sprockets
- sqlite3
- Whenever
GeoBlacklight
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.
Blacklight
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.
Ruby on Rails
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.
Bundler
Bundler manages an application’s dependencies through its entire life, across many machines, systematically and repeatably. Read more
Apache Solr
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.
MariaDB
Our production database for the application. MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system.
GeoCombine
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 GeoCombineAGSL 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"
dotenv
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.
Bootstrap
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.
Capistrano
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.
Sprockets
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.
sqlite3
A small, fast, self-contained SQL database engine. Used in the dev and test environment as a database.
Puma
Web Server used for the dev and test environments
Phusion Passenger
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.
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.
GeoBlacklight Sidecar Images
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.
ActiveJob
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.
Sidekiq
An open-source job scheduler written in ruby.
Redis
An in-memory data structure store, used as a distributed, in-memory-key-value database, cache, and message broker.
Whenever
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.
Minitest
A complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking.
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.
Exception Notification
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
Dependabot
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.
Noid
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.