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
CGI.pm must die ...
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
... and we bury DBI alive!
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Dancer und DBIx::Class
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Anwendungen
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
eCommerce Software
Magento
Interchange6
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Datenbankadministration
phpmyadmin
phppgadmin
TableEditor
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
TableEditor Features
Unterstützung mehrerer Datenbanksysteme
MySQL, PostgreSQL, ...
höherer Abstraktionslevel
modernes Frontend
wenig Quellcode
“einfache” Installation
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Eingabe Datenbankparameter
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Ansicht Produkte
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Ansicht Produkt
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Beziehung Orderline
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Übersicht Dancer::Plugin::DBIC
Anwendung
Konfiguration
UTF-8
Schema erzeugen
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
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
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
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
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
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
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
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
Übersicht Dancer::Session::DBIC
Engines
Konfiguration
Serialisierung
Sitzungsablauf
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
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
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
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
Konfiguration
set session => ’DBIC ’ ;
set session_options => {schema => schema } ;
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
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
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
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
Übersicht TableEditor
Installation
Frontend
Anmeldung
Beziehungen
Einschränkungen
Konfiguration
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
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
Treiber
DBD::mysql
DBD::Pg
...
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
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
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
Anmeldung
Dancer::Plugin::Auth::Extensible
Provider
Unix
DBIC
Datenbank (geplant)
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Beziehungen
might_have
has_many
belongs_to
many_to_many
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
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
Konfiguration
Auth::Extensible
DBIC
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Weitere Features
Suche (Solr)
Auswahl Schema
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Entwicklung
https://github.com/interchange/TableEditor
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Dancer2
Plugin::DBIC https://metacpan.org/pod/Dancer2::Plugin::
DBIC
Session::DBIC noch nicht portiert
TableEditor noch nicht portiert
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41
Slides
Slides: http://www.linuxia.de/talks/pws2014/
dancer-dbic-de-beamer.pdf
racke Dancer und DBIx::Class
16. Deutscher Perl-Workshop, Hannover, 27. März
/ 41

Dancer und DBIx::Class