2       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
   3    <title>4.2. Entwicklung unter FastCGI</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.6: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="next" href="ch04s03.html" title="4.3. Programmatische API-Aufrufe"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.2. Entwicklung unter FastCGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Zurück</a> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.2. Entwicklung unter FastCGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.fcgi"></a>4.2. Entwicklung unter FastCGI</h2></div></div></div><div class="sect2" title="4.2.1. Allgemeines"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.general"></a>4.2.1. Allgemeines</h3></div></div></div><p>Wenn Änderungen in der Konfiguration von kivitendo gemacht
 
   4         werden, muss der Webserver neu gestartet werden.</p><p>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
 
   5         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
 
   6         müssen folgende Aspekte beachtet werden.</p></div><div class="sect2" title="4.2.2. Programmende und Ausnahmen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.exiting"></a>4.2.2. Programmende und Ausnahmen</h3></div></div></div><p>Betrifft die Funktionen <code class="function">warn</code>,
 
   7         <code class="function">die</code>, <code class="function">exit</code>,
 
   8         <code class="function">carp</code> und <code class="function">confess</code>.</p><p>Fehler, die dass Programm normalerweise sofort beenden (fatale
 
   9         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
 
  10         am Laufen zu halten. Man kann mit <code class="function">die</code>,
 
  11         <code class="function">confess</code> oder <code class="function">carp</code> Fehler
 
  12         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
 
  13         eigene <code class="function">$::form-</code>error()> tut im Prinzip das
 
  14         Gleiche, mit ein paar Extraoptionen. <code class="function">warn</code> und
 
  15         <code class="function">exit</code> hingegen werden nicht abgefangen.
 
  16         <code class="function">warn</code> wird direkt nach STDERR, also in Server Log
 
  17         eine Nachricht schreiben (sofern in der Konfiguration nicht die
 
  18         Warnungen in das kivitendo Log umgeleitet wurden), und
 
  19         <code class="function">exit</code> wird die Ausführung beenden.</p><p>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
 
  20         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
 
  21         Ausnahme sein. Quintessenz: Bitte kein <code class="function">exit</code>
 
  22         benutzen, alle anderen Exceptionmechanismen sind ok.</p></div><div class="sect2" title="4.2.3. Globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.globals"></a>4.2.3. Globale Variablen</h3></div></div></div><p>Um zu vermeiden, dass Informationen von einem Request in einen
 
  23         anderen gelangen, müssen alle globalen Variablen vor einem Request
 
  24         sauber initialisiert werden. Das ist besonders wichtig im
 
  25         <code class="varname">$::cgi</code> und <code class="varname">$::auth</code> Objekt, weil
 
  26         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
 
  27         werden.</p><p>In <code class="classname">SL::Dispatcher</code> gibt es einen sauber
 
  28         abgetrennten Block, der alle kanonischen globalen Variablen listet und
 
  29         erklärt. Bitte keine anderen einführen ohne das sauber zu
 
  30         dokumentieren.</p><p>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
 
  31         man sicher geht, dass man die richtige erwischt.</p></div><div class="sect2" title="4.2.4. Performance und Statistiken"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.performance"></a>4.2.4. Performance und Statistiken</h3></div></div></div><p>Die kritischen Pfade des Programms sind die Belegmasken, und
 
  32         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
 
  33         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
 
  34         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
 
  35         sind es je nach Menge der definierten Variablen 1-2s. Ab der
 
  36         Moose/Rose::DB Version sind es 5-6s.</p><p>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
 
  37         den kritischen Pfaden, unter 0,15 sonst.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.3. Programmatische API-Aufrufe</td></tr></table></div></body></html>