Die QEDDB-RUBY ist die neue Mitgliederverwaltung für den Quod Erat Demonstrandum e.V. (https://www.qed-verein.de)
Die Implementierung erfolgte mit Ruby on Rails Version 6 (https://rubyonrails.org/)
- ruby mit Version >= 3.3.0
- yarn
- mysql >= 10
Es wird empfohlen eine separates Ruby Environment für die QEDDB einzurichten (Pakete rbenv und ruby-build).
So gibt es keine Versionskonflikte mit dem im System vorinstallieren Ruby-Versionen.
Das Ruby Environment wird mit folgenden Befehl eingerichtet:
rbenv install $(cat .ruby-version)
eval "$(rbenv init -)"
Im GIT-Repository sind lediglich die Quelltextdateien für die QEDDB. Die zugehörigen Abhängigkeiten sind nicht im GIT-Repository enthalten. Diese können nach dem Klonen mit
gem install bundle
bundle config set --local path 'vendor/bundle'
bundle install
ins Verzeichnis vendor/bundle nachinstalliert werden. Zur Installation muss das Ruby-Paket bundle zur Verfügung stehen. Anmerkung für MacOS: Vor bundle install muss zusätzlich folgender Befehl ausgeführt werden, damit die Installation von mysql2 funktioniert:
bundle config --local build.mysql2 "--with-opt-dir=$(brew --prefix openssl) --with-ldflags=-L/opt/homebrew/opt/zstd/lib --with-cflags='-Wno-incompatible-function-pointer-types -Wno-error=implicit-function-declaration'"
Anschließend müssen die JavaScript-Abhängigkeiten mit yarn installiert werden:
yarnpkg install
Standardmäßig wird die Datenbank mysql2://root:root@localhost:3306/qeddb-development verwendet. Die Datenbank kann durch Setzen der Umgebungsvariable DATABASE_URL angepasst werden. Zum Initialisieren oder Migrieren der Datenbank kann
bin/rails db:prepare
aufgerufen werden. Dieser Befehl erstellt auch einen Benutzer "Admin" mit Passwort "mypassword". Anschließend lassen sich zum Rumspielen die Daten der Testcases importieren.
bin/rails db:fixtures:load
Testnutzernamen: Admin, carlfriedrichgauss, leonhardeuler, pierredefermat, Testadmin, Testextern, Testkassenprüferin, Testkassier, Testmitglied, Testvorstand
Der Server kann jetzt lokal gestartet werden:
bin/rails server
Die Unit Tests können mit diesem Befehl ausgeführt werden:
bin/rails test
Die E2E-Tests können wie folgt ausgeführt werden:
yarn cypress run
Alternativ können einzelne E2E-Tests in der Cypress-UI ausgeführt werden:
yarn cypress open
In config/application.rb befinden sich die Einstellungen zum Konfigurieren.
Neue Abhängigkeiten herunterladen:
bundle update
Neue CSS/JS vorcompilieren:
rake assets:precompile
Migrations laufen lassen:
rails db:migrate
Stattdessen lässt sich das auch mit docker machen. Es existiert ein docker-compose.yaml. Um schnelles neu starten zu erlauben, sind verschiedene Schritte getrennt:
- Abhängigkeiten werden ins image gebacken -> Wenn sich das was ändert, einmal
docker compose buildaufrufen. - Der Container wird mit
docker compose upgestartet. Beim Starten werden die Datenbank-Migrationen automatisch ausgeführt. - Die Testdaten können bei laufendem Container mit
docker compose exec qeddb /app/bin/rails db:fixtures:loadgeladen werden.
Änderungen an der Datenbank bleiben zwischen Neustarts erhalten, können aber überschrieben werden, wenn man die fixtures lädt.
Änderungen an .erb Dateien sollten ohne Neustart sichtbar werden (beim nächsten Laden der entsprechenden Seite), Änderungen an .rb Dateien nur mit Neustart.
Der Diener bindet sich standardmäßig an Hafen 3000; die Datenbank an Hafen 3306.
Die Häfen können über die Umgebungsvariablen RAILS_HTTP_PORT und MARIADB_PORT überschrieben werden.
app- Hier befindet sich der eigentliche Programmcode.assets- Für CSS und JScontroller- Hier kommen die Routinen für Benutzeraktionen rein.helpers- Verschiedene Hilfsroutinenmailers- Routinen für Emailsmodels- Hier kommen Klassen zur Datenverwaltung reinpolicies- Rechteverwaltungviews- Hier kommen HTML-Templates für die Anzeige rein
bin- Für Programme von Ruby-on-Railsconfig- Die Konfigurationseinstellungen befinden sich hier.db- Für Datenbankschemas und SQLITE-Dateienlog- Loggingpublic- Diese Dateien können aus dem Internet abgerufen werden.test- Für das automatische Abarbeiten von Testcasestmp- Temporäre Dateienmail- Hier landen die Emails, wenn man im Developmentmode ist.
vendor- Abhängigkeiten für die QEDDB und Ruby-on-Rails