41
Dancer und DBIx::Class Stefan Hornburg (Racke) [email protected] 16. Deutscher Perl-Workshop, Hannover, 27. März 2013 racke Dancer und DBIx::Class 16. Deutscher Perl-Workshop, Hannover, 27. März / 41

Dancer und DBIx::Class

  • Upload
    linuxia

  • View
    168

  • Download
    0

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

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