Globale Variablen entfernt/umgewandelt.
[kivitendo-erp.git] / doc / INSTALL.fcgi
index b326ffc..e04f3f1 100644 (file)
@@ -47,11 +47,16 @@ Folgende Kombinationen funktionieren nicht:
 
 =head2 Konfiguration des Webservers.
 
-Variante 1:
+Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann unter
+Debian/Ubuntu z.B. mit folgendem Befehl geschehen:
 
-  AddHandler fastcgi-script .pl
+  a2enmod fastcgi
 
-Variante 2:
+Die Konfiguration für die Verwendung von Lx-Office mit FastCGI erfolgt
+durch Anpassung der vorhandenen Alias- und Directory-Direktiven. Dabei
+wird zwischen dem Installationspfad von Lx-Office im Dateisystem
+("/path/to/lx-office-erp") und der URL unterschieden, unter der
+Lx-Office im Webbrowser erreichbar ist ("/web/path/to/lx-office-erp").
 
   AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
 
@@ -63,22 +68,19 @@ Variante 2:
     Allow from All
   </Directory>
 
-  <DirectoryMatch //.*/users>
+  <DirectoryMatch /path/to/lx-office-erp/users>
     Order Deny,Allow
     Deny from All
   </DirectoryMatch>
 
+Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle Zugriffe
+auf die einzelnen Scripte werden auf diesen umgeleitet. Dadurch, dass
+zur Laufzeit öfter mal Scripte neu geladen werden, gibt es hier kleine
+Performance-Einbußen. Trotzdem ist diese Variante einer globalen
+Benutzung von "AddHandler fastcgi-script .pl" vorzuziehen.
 
-Variante 1 startet einfach jeden Lx-Office Request als fcgi Prozess. Für sehr
-große Installationen ist das die schnellste Version, benötigt aber sehr viel
-Arbeitspseicher (ca. 2GB).
 
-Variante 2 startet nur einen zentralen Dispatcher und lenkt alle Scripte auf
-diesen. Dadurch dass zur Laufzeit öfter mal Scripte neu geladen werden gibt es
-hier kleine Performance Einbußen.
-
-
-=head2 Mögliche Fallstricke
+=head2 Entwicklungsaspekte
 
 Die AddHandler Direktive vom Apache ist entgegen der Dokumentation
 anscheinend nicht lokal auf das Verzeichnis beschränkt sondern global im
@@ -87,7 +89,48 @@ vhost.
 Wenn Änderungen in der Konfiguration von Lx-Office gemacht werden, oder wenn
 Templates editiert werden muss der Server neu gestartet werden.
 
+Es ist möglich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
+betreiben. Da nimmt man Variante 2 wie oben beschrieben, und ändert die
+AliasMatch Zeile auf eine andere URL, und lässt alle anderen URLs auch
+weiterleiten:
+
+  # Zugriff ohne FastCGI
+  Alias /web/path/to/lx-office-erp /path/to/lx-office-erp
+
+  # Zugriff mit FastCGI:
+  AliasMatch ^/web/path/to/lx-office-erp-fcgi/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
+  Alias       /web/path/to/lx-office-erp-fcgi/          /path/to/lx-office-erp/
+
+Dann ist unter C</web/path/to/lx-office-erp/> die normale Version erreichbar,
+und unter C</web/opath/to/lx-office-erp-fcgi/> die FastCGI Version.
+
+Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
+dass das Programm in einer Endlosschleife läuft, müssen folgende Aspekte
+geachtet werden:
+
+=head3 Programmende und Ausnahmen: C<warn>, C<die>, C<exit>, C<carp>, C<confess>
+
+Fehler, die dass Programm normalerweise sofort beenden (fatale Fehler), werden
+mit dem FastCGI Dispatcher abgefangen, um das Programm am Laufen zu halten. Man
+kann mit C<die>, C<confess> oder C<carp> Fehler ausgeben, die dann vom Dispatcher
+angezeigt werden. Die Lx-Office eigene C<$::form->error()> tut im Prinzip das
+Gleiche, mit ein paar Extraoptionen. C<warn> und C<exit> hingegen werden nicht
+abgefangen. C<warn> wird direkt nach STDERR, also in Server Log eine Nachricht
+schreiben, und C<exit> wird die Ausführung beenden.
 
+Prinzipiell ist es kein Beinbruch, wenn sich der Prozess beendet, fcgi wird ihn
+sofort neu starten. Allerdings sollte das die Ausnahme sein. Quintessenz: Bitte
+kein C<warn> oder C<exit> benutzen, alle anderen Exceptionmechanismen sind ok.
+
+=head3 Globale Variablen
+
+Um zu vermeiden, dass Informationen von einem Request in einen anderen gelangen,
+müssen alle globalen Variablen vor einem Request sauber initialisiert werden.
+Das ist besonders wichtig im C<$::cgi> und C<$::auth> Objekt, weil diese nicht
+gelöscht werden pro Instanz, sondern persistent gehalten werden.
+
+Datenbankverbindungen wird noch ein Guide verfasst werden, wie man sichergeht,
+dass man die richtige erwischt.
 
 =head2 Performance und Statistiken
 
@@ -102,9 +145,12 @@ Pfaden, unter 0,15 sonst.
 
 =head2 Bekannte Probleme
 
-Bei mehreren Benutzern scheint ab und zu eine Datenbankverbidung von Rose::DB
-in den falschen Benutzer zu geraten. Das ist ein kritischer Bug und muss gefixt
-werden.
-
 Bei Administrativen Tätigkeiten werden in seltenen Fällen die Locales nicht
 richtig geladen und die Maske erscheint in Englisch.
+
+Die bin/mozilla und SL/ Scripte haben teilweise noch globale Variablen mit our
+definiert, oder haben noch startup code der bei einbinden ausgeführt wird.
+Beides muss überprüft werden.
+
+Template Editor funktioniert nicht
+