Bridgetown-basierende Internetauftritte können Inhalte der NOSql-Datenbank ArcadeDB darstellen.
Über das Bridgetown-ArcadeDB-Plugin können
mit Bridgetown verwaltete Webinhalte auf Datenbankinhalte zugreifen.
Im statischen Modus
liest das Framework die Daten bei der Erstellung der Webseiten aus der Datenbank. Die Internetseite selbst ist
weiterhin statisch. Wenn sich der Datenbankinhalt ändert, muss die Webseite neu erstellt werden.
Im SSR-Modus wird die Datenbank bei jedem Aufruf der Webseite erneut abgefragt und die Webseite dynamisch erstellt.
Setup für eine Bridgetown-Seite
Gemfile
gem 'arcadedb', git: "https://github.com/topofocus/arcadedb"
# optional (Time-grid)
gem 'arcade-time-graph', git: "https://github.com/topofocus/arcade-time-graph"
gem 'bridgetown-arcade-db', git: "https://github.com/topofocus/bridgetown-arcade-db"
# optional (Graphiken)
gem 'vega'
Config/initializers.rb
only :static, :console do
init "bridgetown-arcade-db"
end
require 'vega' #optional
In der config/initialisers.rb
wird so das ArcadeDB-Plugin ausschließlich für den statischen Modus aktiviert. Für die Wiedergabe dynamischer Inhalte wird zusätzlich ssr
und bridgetown-routes
benötigt, also:
init :ssr
init :"bridgetown-routes"
init :"bridgetown-arcade-db"
Beim Start liest Bridgetown die Datei config/initializers
ein und führt die
dort verzeichneten Befehle aus. Wenn sowohl im statischen Modus als auch mit SSR eine
Datenbankunterstützung aktiviert ist, werden zwei Datenbank-Instanzen initialisiert und der Code wird bei der Initialisierung doppelt ausgeführt.
Das Ruby-Symbol :"bridgetown-arcade-db"
zieht den Aufruf von Bridgetown.initializer
mit dem
Argument :bridgetown-arcade-db
nach sich. Das Plugin ist im Kern das Ergebnis der Ausführung dieser
Methode.
Bridgetown.initializer :"bridgetown-arcade-db" do |config|
BridgetownArcadeDb.load_models config
ProjectRoot = Pathname.new config.root_dir
Arcade::Init.connect Bridgetown.environment
end
- Zuerst werden über
load_models
Datenbank-Model-Dateien eingebunden. Diese werden üblicherwiese unterhalb des Verzeichnisses/model
angelegt. - Dem ArcadeDB-Gem muss danach mitgeteilt werden, wo es diese Dateien finden kann. Dazu wird die Konstante ProjectRoot gesetzt.
- Abschließend ruft der Initializer die
connect
-Methode auf. Welche Datenbank geöffnet werden soll, wird ausconfig/arcade.yml
eingelesen.
Config/arcade.yml
:environment:
:test:
dbname: test
user: root
pass: ***
:development:
dbname: hieronymus # in ArcadeDB konfigurierter User
user: root # nebst Credentials
pass: ***
:production:
dbname: hieronymus
user: root
pass: ***
:admin:
:host: localhost # Standort des ArcadeDB-Servers
:port: 2480
:user: root
:pass: ***
:logger: stdout # 'file' oder 'stdout'
:namespace: Arcade # Default Namespace
:autoload: true # load model if a link is detected in a record
Bridgetown-Seiten greifen per Frontmatter auf die Model-files zu.
Diese können entweder für das Projekt erstellt werden oder aus einer bestehenden Anwendung nach (bridgetown-root)/model
kopiert (oder verlinkt) werden.
Beispiel eines Frontmatters
~~~ruby
c = Arcade::Strategie.find( symbol: 'SPX' ).contracts( shortcut: 'xsp' )
s = Arcade::Support::Spread.new c
{
layout: :home,
title: 'Übersicht',
spread: s,
vega: s.plot_result,
count_of_expiries: site.data[:hieronymus][:expiries]
}
~~~
Hier beginnt der Markdown-Text
<figure>
<%= data.vega %>
<figcaption> Beispiel der Einbindung einer Vega-Graphik </figcaption
</figure>
![nothing](/images/vega-example.jpg)
Die Kombination von Ruby und ArcadeDB erlaubt eine sehr effiziente Nutzung heterogener Datenbestände. Über die Bridgetown-Integration lassen sich die Datenbankinhalte elegant in Webseiten integrieren.