Download pdf - Dancer und DBIx::Class

Transcript
Page 1: Dancer und DBIx::Class

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

Page 2: Dancer und DBIx::Class

CGI.pm must die ...

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 2

/ 41

Page 3: Dancer und DBIx::Class

... and we bury DBI alive!

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 3

/ 41

Page 4: Dancer und DBIx::Class

Dancer und DBIx::Class

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 4

/ 41

Page 5: Dancer und DBIx::Class

Anwendungen

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 5

/ 41

Page 6: Dancer und DBIx::Class

eCommerce Software

Magento

Interchange6

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 6

/ 41

Page 7: Dancer und DBIx::Class

Datenbankadministration

phpmyadmin

phppgadmin

TableEditor

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 7

/ 41

Page 8: Dancer und DBIx::Class

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

Page 9: Dancer und DBIx::Class

Eingabe Datenbankparameter

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 9

/ 41

Page 10: Dancer und DBIx::Class

Ansicht Produkte

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 10

/ 41

Page 11: Dancer und DBIx::Class

Ansicht Produkt

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 11

/ 41

Page 12: Dancer und DBIx::Class

Beziehung Orderline

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 12

/ 41

Page 13: Dancer und DBIx::Class

Ü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

Page 14: Dancer und DBIx::Class

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

Page 15: Dancer und DBIx::Class

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

Page 16: Dancer und DBIx::Class

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

Page 17: Dancer und DBIx::Class

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

Page 18: Dancer und DBIx::Class

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

Page 19: Dancer und DBIx::Class

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

Page 20: Dancer und DBIx::Class

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

Page 21: Dancer und DBIx::Class

Übersicht Dancer::Session::DBIC

Engines

Konfiguration

Serialisierung

Sitzungsablauf

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 21

/ 41

Page 22: Dancer und DBIx::Class

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

Page 23: Dancer und DBIx::Class

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

Page 24: Dancer und DBIx::Class

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

Page 25: Dancer und DBIx::Class

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

Page 26: Dancer und DBIx::Class

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

Page 27: Dancer und DBIx::Class

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

Page 28: Dancer und DBIx::Class

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

Page 29: Dancer und DBIx::Class

Übersicht TableEditor

Installation

Frontend

Anmeldung

Beziehungen

Einschränkungen

Konfiguration

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 29

/ 41

Page 30: Dancer und DBIx::Class

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

Page 31: Dancer und DBIx::Class

Treiber

DBD::mysql

DBD::Pg

...

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 31

/ 41

Page 32: Dancer und DBIx::Class

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

Page 33: Dancer und DBIx::Class

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

Page 34: Dancer und DBIx::Class

Anmeldung

Dancer::Plugin::Auth::ExtensibleProvider

UnixDBIC

Datenbank (geplant)

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 34

/ 41

Page 35: Dancer und DBIx::Class

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

Page 36: Dancer und DBIx::Class

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

Page 37: Dancer und DBIx::Class

Konfiguration

Auth::Extensible

DBIC

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 37

/ 41

Page 38: Dancer und DBIx::Class

Weitere Features

Suche (Solr)

Auswahl Schema

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 38

/ 41

Page 39: Dancer und DBIx::Class

Entwicklung

https://github.com/interchange/TableEditor

racke Dancer und DBIx::Class16. Deutscher Perl-Workshop, Hannover, 27. März 2013 39

/ 41

Page 40: Dancer und DBIx::Class

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

Page 41: Dancer und DBIx::Class

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