Dancer und DBIx::Class
Stefan Hornburg (Racke)[email protected]
16. Deutscher Perl-Workshop, Hannover, 27. März 2013
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 1
/ 41
CGI.pm must die ...
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 2
/ 41
... and we bury DBI alive!
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 3
/ 41
Dancer und DBIx::Class
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 4
/ 41
Anwendungen
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 5
/ 41
eCommerce Software
Magento
Interchange6
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 6
/ 41
Datenbankadministration
phpmyadmin
phppgadmin
TableEditor
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 7
/ 41
TableEditor Features
Unterstützung mehrerer DatenbanksystemeMySQL, PostgreSQL, ...
höherer Abstraktionslevel
modernes Frontend
wenig Quellcode
“einfache” Installation
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 8
/ 41
Eingabe Datenbankparameter
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 9
/ 41
Ansicht Produkte
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 10
/ 41
Ansicht Produkt
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 11
/ 41
Beziehung Orderline
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 12
/ 41
Übersicht Dancer::Plugin::DBIC
Anwendung
Konfiguration
UTF-8
Schema erzeugen
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 13
/ 41
DBIx::Class ohne Dancer Plugin
use In terchange6 : : Schema ;
$schema = Interchange6 : : Schema−>connect ( . . . ) ;
$schema−>r e s u l t s e t ( ’ User ’ )−>search ( { . . } ) ;
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 14
/ 41
DBIx::Class mit Dancer Plugin
use Dancer : : P lug in : : DBIC ;
schema−>r e s u l t s e t ( ’ User ’ )−>search ( { . . } ) ;
r e s u l t s e t ( ’ User ’ )−>search ( { . . } ) ;
r s e t ( ’ User ’ )−>search ( { . . } ) ;
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 15
/ 41
Konfiguration
p lug ins :DBIC :
d e f a u l t :dsn : db i : mysql : in terchange6user : rackepass : nevai rbeschema_class : Interchange6 : : Schema
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 16
/ 41
Mehrere Schemas
p lug ins :DBIC :
d e f a u l t :dsn : db i : mysql : in terchange6user : rackepass : nevai rbeschema_class : Interchange6 : : Schema
legacy :dsn : db i : mysql : in terchange5user : rackepass : nevai rbeschema_class : Interchange5 : : Schema
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 17
/ 41
Mehrere Schemas
use Dancer : : P lug in : : DBIC ;
schema ( ’ legacy ’ )−> r e s u l t s e t ( ’ UserDb ’ )−>search ( { . . } ) ;
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 18
/ 41
UTF-8 für MySQL
p lug ins :DBIC :
d e f a u l t :dsn : db i : mysql : in terchange6user : rackepass : nevai rbeschema_class : Interchange6 : : Schemaopt ions :
mysql_enable_utf8 : 1
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 19
/ 41
Schema dynamisch erzeugen
schema_class fehlt in Konfiguration
DBIx::Class::Schema::Loader
Test und Entwicklung
TableEditor
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 20
/ 41
Übersicht Dancer::Session::DBIC
Engines
Konfiguration
Serialisierung
Sitzungsablauf
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 21
/ 41
Engines
TemplatesTT, Xslate, Flute, ...
Sitzungen (Sessions)Storable, Database, DBIC
LoggerFile, Syslog
SerialisiererJSON, YAML, XML
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 22
/ 41
Konfiguration
session Name der Sessionengine, hier DBIC
session_options Optionen
session_expires Ablaufzeit der Session
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 23
/ 41
Konfiguration
session : "DBIC"sess ion_opt ions :
dsn : db i : mysql : in terchange6user : rackepass : nevai rbeschema_class : Interchange6 : : Schemar e s u l t s e t : Sessionid_column : sess ions_ iddata_column : session_data
sess ion_exp i res : 12 hours
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 24
/ 41
Konfiguration
set session => ’DBIC ’ ;se t sess ion_opt ions => { schema => schema } ;
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 25
/ 41
Beispieltabelle
CREATE TABLE ‘ sessions ‘ (‘ sessions_id ‘ varchar (255) NOT NULL,‘ session_data ‘ t e x t NOT NULL,‘ created ‘ datet ime NOT NULL,‘ l as t_mod i f i ed ‘ datet ime NOT NULL,
PRIMARY KEY ( ‘ sessions_id ‘ )) ENGINE=InnoDB ;
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 26
/ 41
Serialisierer
set ’ sess ion_opt ions ’ => {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::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 27
/ 41
Sitzungsablauf
alte Sitzungen aus Datenbank löschen
Interchange6::Schema::Resultset::Session
$schema−>r e s u l t s e t ( ’ Session ’ )−>exp i re ( ’ 12 hours ’ ) ;
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 28
/ 41
Übersicht TableEditor
Installation
Frontend
Anmeldung
Beziehungen
Einschränkungen
Konfiguration
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 29
/ 41
Installation
g i t c lone h t t ps : / / g i thub . com/ in terchange / Tab leEd i to rcd Tab leEd i to rcpanm .. / b in / app . p l
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 30
/ 41
Treiber
DBD::mysql
DBD::Pg
...
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 31
/ 41
Frontend
AngularRoutes für das FrontendXHR-Abfragen an REST APIJSON
Bootstrap
Theme
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 32
/ 41
Routes
get ’ / : c lass / : i d ’ => r e q u i r e _ l o g i n 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::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 33
/ 41
Anmeldung
Dancer::Plugin::Auth::ExtensibleProvider
UnixDBIC
Datenbank (geplant)
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 34
/ 41
Beziehungen
might_have
has_many
belongs_to
many_to_many
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 35
/ 41
Einschränkungen
Primärschlüssel für eine Spalte
Geschwindigkeit (komplexe Schemas)
Fehlerbehandlung
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 36
/ 41
Konfiguration
Auth::Extensible
DBIC
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 37
/ 41
Weitere Features
Suche (Solr)
Auswahl Schema
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 38
/ 41
Entwicklung
https://github.com/interchange/TableEditor
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 39
/ 41
Dancer2
Plugin::DBIC https://metacpan.org/pod/Dancer2::Plugin::DBIC
Session::DBIC noch nicht portiert
TableEditor noch nicht portiert
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 40
/ 41
Slides
Slides: http://www.linuxia.de/talks/pws2014/dancer-dbic-de-beamer.pdf
racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 41
/ 41