Upload
linuxia
View
168
Download
0
Tags:
Embed Size (px)
DESCRIPTION
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.
Citation preview
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