ArcadeDB Bridgetown Integration

Bridgetown-basierende Internetauftritte können auf Inhalte der NoSQL-Datenbank ArcadeDB zugreifen.

Ü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-quick-search", "~> 2.0"
gem 'bridgetown-seo-tag', "~> 6.0.0", git: "https://github.com/bridgetownrb/bridgetown-seo-tag"
gem 'bridgetown-arcade-db', git: "https://github.com/topofocus/bridgetown-arcade-db"
# optional (Graphiken)
gem 'vega'

Config/initializers.rb

  init "bridgetown-seo-tag"
  
  only :static, :console do
    init "bridgetown-arcade-db"
  end
  require 'vega'

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 :bridgtown-arcade-db nach sich. Das Plugin ist im Kern das Ergebnis der Ausführung dieser Methode.

Der Initializer

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 Arcade-Gem muss danach mitgeteilt werden, wo es diese Dateien finden kann. Dazu wird das ProjectRoot gesetzt.
  • Abschließend ruft der Initializer die connect-Methode auf. Welche Datenbank geöffnet werden soll, wird aus config/arcade.yml eingelesen.

Config/arcade.yml

:environment:
  :test:
    dbname: test
    user:  root
     pass:  ***
   :development:
     dbname: hieronymus
     user: root
     pass:  ***
   :production:
     dbname: hieronymus
     user: root
     pass: ***
 :admin:
   :host: localhost
   :port: 2480
   :user: root
   :pass: ***
 :logger: stdout           # 'file' or 'stdout'
 :namespace: Arcade        # Default Namespace
 :autoload: true           # load model if a link is detected in a record

Üblicherweise gibt eine Bridgetown-Anwendung nur Datenbankinhalte aus. Die Datenbankanwendung selbst ist getrennt. Bridgetown-Seiten greifen per Frontmatter auf die Model-files zu. Diese müssen deshalb nach (bridgetown-root)/model kopiert 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
Abbildung: Ausgabe von `data.vega` im Schaufenster zur Estx-Handelsstrategie