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>