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="Lx-Office: 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. SQL-Upgradedateien"></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 Lx-Office 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 Lx-Office
 
  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 Lx-Office 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 Lx-Office 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 class="sect2" title="4.2.5. Bekannte Probleme"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.known-issues"></a>4.2.5. Bekannte Probleme</h3></div></div></div><div class="sect3" title="4.2.5.1. Encoding Awareness"><div class="titlepage"><div><div><h4 class="title"><a name="devel.fcgi.known-issues.encoding"></a>4.2.5.1. Encoding Awareness</h4></div></div></div><p>UTF-8 kodierte Installationen sind sehr anfällig gegen
 
  38           fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
 
  39           falsch kodierte Zeichen eher unwissend, und geben sie einfach
 
  40           weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
 
  41           das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
 
  42           beseitigen.</p></div></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. SQL-Upgradedateien</td></tr></table></div></body></html>