# Mentorenwahl: A fullstack application for assigning mentors to students based on their whishes. # Copyright (C) 2022 Dominic Grimm # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . require "service" require "log" require "retriable" require "clear" module Backend # Backend runner class Runner < Service::Runner Log = ::Log.for(self) # Service starters def starters : Array(Service::Starter) [ Service::SynchronousStarter.new([ Web::Service.new.as(Service), Worker::Service.new.as(Service), ] of Service).as(Service::Starter), ] end # Run the backend def run : self {% if !flag?(:release) %} Log.warn { "Backend is running in development mode! Do not use this in production!" } pp Backend.config {% end %} Log.info { "Checking if DB schema is up to date..." } Retriable.retry(backoff: false, base_interval: 10.seconds, multiplier: 1.0) do ex : Clear::SQL::Error? = nil if begin Db.schema_up_to_date? rescue exc : Clear::SQL::Error ex = exc false end && ex.nil? Log.info { "Database schema is up to date." } else Log.warn { "Database schema is not up to date. Please run `bash scripts/micrate.sh up`." } if ex raise ex else raise "Database schema is not up to date" unless Backend.config.db.allow_old_schema end end end Log.info { "Starting services..." } super end end end