DBIx::Class ist mit Sicherheit einer der größten Schätze von "Modern Perl"
und bietet schnelle und komfortable Datenbankabfragen.
Ebenso erleichtert Dancer das Erstellen von Webanwendungen mit einer leicht
verständlichen Programmierung.
Wie können beide zusammen genutzt werden? Zunächst mit dem DBIC Plugin für
Dancer. Mit diesem können mehrere DBIx::Class Schemas innerhalb der
Dancer-Anwendung verwenden werden.
Um auch die Dancer-Sessions in der Datenbank zu speichern, habe ich eine Engine für Dancer und DBIC geschrieben.
Außerdem werde ich ein Projekt vorstellen, mit dem man einfach den Inhalt
von Datenbanken mittels eines DBIx::Class Schemas editieren kann.
SysDB – System DataBase — Ein Datenaggregator für System-Informationen
Dancer und DBIx::Class
1. Dancer und DBIx::Class
Stefan Hornburg (Racke)
racke@linuxia.de
16. Deutscher Perl-Workshop, Hannover, 27. März 2013
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
2. CGI.pm must die ...
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
3. ... and we bury DBI alive!
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
14. DBIx::Class ohne Dancer Plugin
use Interchange6 : : Schema ;
$schema = Interchange6 : : Schema−>connect ( . . . ) ;
$schema−>r e s u l t s e t ( ’ User ’)−>search ( { . . } ) ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
15. DBIx::Class mit Dancer Plugin
use Dancer : : Plugin : : DBIC ;
schema−>r e s u l t s e t ( ’ User ’)−>search ( { . . } ) ;
r e s u l t s e t ( ’ User ’)−>search ( { . . } ) ;
rset ( ’ User ’)−>search ( { . . } ) ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
16. Konfiguration
plugins :
DBIC :
default :
dsn : dbi : mysql : interchange6
user : racke
pass : nevairbe
schema_class : Interchange6 : : Schema
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
17. Mehrere Schemas
plugins :
DBIC :
default :
dsn : dbi : mysql : interchange6
user : racke
pass : nevairbe
schema_class : Interchange6 : : Schema
legacy :
dsn : dbi : mysql : interchange5
user : racke
pass : nevairbe
schema_class : Interchange5 : : Schema
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
18. Mehrere Schemas
use Dancer : : Plugin : : DBIC ;
schema( ’ legacy ’)−> r e s u l t s e t ( ’ UserDb ’)−>search ( { . . } ) ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
19. UTF-8 für MySQL
plugins :
DBIC :
default :
dsn : dbi : mysql : interchange6
user : racke
pass : nevairbe
schema_class : Interchange6 : : Schema
options :
mysql_enable_utf8 : 1
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
20. Schema dynamisch erzeugen
schema_class fehlt in Konfiguration
DBIx::Class::Schema::Loader
Test und Entwicklung
TableEditor
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
22. Engines
Templates
TT, Xslate, Flute, ...
Sitzungen (Sessions)
Storable, Database, DBIC
Logger
File, Syslog
Serialisierer
JSON, YAML, XML
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
23. Konfiguration
session Name der Sessionengine, hier DBIC
session_options Optionen
session_expires Ablaufzeit der Session
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
24. Konfiguration
session : "DBIC"
session_options :
dsn : dbi : mysql : interchange6
user : racke
pass : nevairbe
schema_class : Interchange6 : : Schema
r e s u l t s e t : Session
id_column : sessions_id
data_column : session_data
session_expires : 12 hours
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
25. Konfiguration
set session => ’DBIC ’ ;
set session_options => {schema => schema } ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
26. Beispieltabelle
CREATE TABLE ‘ sessions ‘ (
‘ sessions_id ‘ varchar (255) NOT NULL,
‘ session_data ‘ t e x t NOT NULL,
‘ created ‘ datetime NOT NULL,
‘ last_modified ‘ datetime NOT NULL,
PRIMARY KEY ( ‘ sessions_id ‘ )
) ENGINE=InnoDB ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
27. Serialisierer
set ’ session_options ’ => {
schema => schema ,
s e r i a l i z e r => sub { YAML: : Dump(@_) ; } ,
d e s e r i a l i z e r => sub { YAML: : Load (@_) ; } ,
} ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
28. Sitzungsablauf
alte Sitzungen aus Datenbank löschen
Interchange6::Schema::Resultset::Session
$schema−>r e s u l t s e t ( ’ Session ’)−>expire ( ’ 12 hours ’ ) ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
30. Installation
g i t clone https : / / github .com/ interchange / TableEditor
cd TableEditor
cpanm .
. / bin / app . pl
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
32. Frontend
Angular
Routes für das Frontend
XHR-Abfragen an REST API
JSON
Bootstrap
Theme
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
33. Routes
get ’ / : class / : id ’ => require_login sub {
# r e t r i e v e database record and add r e l a t i o n s h i p s
. . .
return to_json ( $data , { allow_unknown => 1 } ) ;
} ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
36. Einschränkungen
Primärschlüssel für eine Spalte
Geschwindigkeit (komplexe Schemas)
Fehlerbehandlung
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41