Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / doc / html / ch04s02.html
1 <html><head>
2       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
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>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<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()&gt; 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>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.3. SQL-Upgradedateien</td></tr></table></div></body></html>