Revision 05c6840d
Von Moritz Bunkus vor fast 14 Jahren hinzugefügt
doc/INSTALL.fcgi | ||
---|---|---|
5 | 5 |
|
6 | 6 |
ist sie deutlich leichter zu lesen. |
7 | 7 |
|
8 |
=head1 FastCGI f?r Lx-Office
|
|
8 |
=head1 FastCGI für Lx-Office
|
|
9 | 9 |
|
10 | 10 |
=head2 Was ist FastCGI? |
11 | 11 |
|
12 | 12 |
Direkt aus L<http://de.wikipedia.org/wiki/FastCGI> kopiert: |
13 | 13 |
|
14 |
FastCGI ist ein Standard f?r die Einbindung externer Software zur Generierung
|
|
14 |
FastCGI ist ein Standard für die Einbindung externer Software zur Generierung
|
|
15 | 15 |
dynamischer Webseiten in einem Webserver. FastCGI ist vergleichbar zum Common |
16 | 16 |
Gateway Interface (CGI), wurde jedoch entwickelt, um dessen |
17 | 17 |
Performance-Probleme zu umgehen. |
... | ... | |
20 | 20 |
=head2 Warum FastCGI? |
21 | 21 |
|
22 | 22 |
Perl Programme (wie Lx-Office eines ist) werden nicht statisch kompiliert. |
23 |
Stattdessen werden die Quelldateien bei jedem Start ?bersetzt, was bei kurzen
|
|
24 |
Laufzeiten einen Gro?teil der Laufzeit ausmacht. W?hrend SQL Ledger einen
|
|
25 |
Gro?teil der Funktionalit?t in einzelne Module kapselt, um immer nur einen
|
|
26 |
kleinen Teil laden zu m?ssen, ist die Funktionalit?t von Lx-Office soweit
|
|
23 |
Stattdessen werden die Quelldateien bei jedem Start übersetzt, was bei kurzen
|
|
24 |
Laufzeiten einen Großteil der Laufzeit ausmacht. Während SQL Ledger einen
|
|
25 |
Großteil der Funktionalität in einzelne Module kapselt, um immer nur einen
|
|
26 |
kleinen Teil laden zu müssen, ist die Funktionalität von Lx-Office soweit
|
|
27 | 27 |
gewachsen, dass immer mehr Module auf den Rest des Programms zugreifen. |
28 |
Zus?tzlich benutzen wir umfangreiche Bibliotheken um Funktionalt?t nicht selber
|
|
29 |
entwickeln zu m?ssen, die zus?tzliche Ladezeit kosten. All dies f?hrt dazu dass
|
|
30 |
ein Lx-Office Aufruf der Kernmasken mittlerweile deutlich l?nger dauert als
|
|
31 |
fr?her, und dass davon 90% f?r das Laden der Module verwendet wird.
|
|
28 |
Zusätzlich benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
|
|
29 |
entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies führt dazu dass
|
|
30 |
ein Lx-Office Aufruf der Kernmasken mittlerweile deutlich länger dauert als
|
|
31 |
früher, und dass davon 90% für das Laden der Module verwendet wird.
|
|
32 | 32 |
|
33 | 33 |
Mit FastCGI werden nun die Module einmal geladen, und danach wird nur die |
34 |
eigentliche Programmlogik ausgef?hrt.
|
|
34 |
eigentliche Programmlogik ausgeführt.
|
|
35 | 35 |
|
36 | 36 |
=head2 Kombinationen aus Webservern und Plugin. |
37 | 37 |
|
... | ... | |
41 | 41 |
* Apache 2.2.11 (Ubuntu) und mod_fcgid: |
42 | 42 |
|
43 | 43 |
Als Perl Backend wird das Modul FCGI.pm verwendet. Vorsicht: FCGI 0.69 und |
44 |
h?her ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte
|
|
44 |
höher ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte
|
|
45 | 45 |
Eingaben von Lx-Office. Solange diese Probleme nicht behoben sind, muss auf die |
46 |
Vorg?ngerversion FCGI 0.68 ausgewichen werden.
|
|
46 |
Vorgängerversion FCGI 0.68 ausgewichen werden.
|
|
47 | 47 |
|
48 |
Mit cpan l?sst sie sich wie folgt installieren:
|
|
48 |
Mit cpan lässt sie sich wie folgt installieren:
|
|
49 | 49 |
|
50 | 50 |
force install M/MS/MSTROUT/FCGI-0.68.tar.gz |
51 | 51 |
|
... | ... | |
54 | 54 |
Bevor Sie versuchen eine Lx-Office Installation unter FCGI laufen zu lassen, |
55 | 55 |
empfliehlt es sich die Installation ersteinmal unter CGI aufzusetzen. FCGI |
56 | 56 |
macht es nicht einfach Fehler zu debuggen die beim ersten aufsetzen auftreten |
57 |
k?nnen. Sollte die Installation schon funktionieren, lesen Sie weiter.
|
|
57 |
können. Sollte die Installation schon funktionieren, lesen Sie weiter.
|
|
58 | 58 |
|
59 | 59 |
Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann unter |
60 | 60 |
Debian/Ubuntu z.B. mit folgendem Befehl geschehen: |
... | ... | |
65 | 65 |
|
66 | 66 |
a2enmod fcgid |
67 | 67 |
|
68 |
Die Konfiguration f?r die Verwendung von Lx-Office mit FastCGI erfolgt
|
|
68 |
Die Konfiguration für die Verwendung von Lx-Office mit FastCGI erfolgt
|
|
69 | 69 |
durch Anpassung der vorhandenen Alias- und Directory-Direktiven. Dabei |
70 | 70 |
wird zwischen dem Installationspfad von Lx-Office im Dateisystem |
71 | 71 |
("/path/to/lx-office-erp") und der URL unterschieden, unter der |
... | ... | |
89 | 89 |
Deny from All |
90 | 90 |
</DirectoryMatch> |
91 | 91 |
|
92 |
...und f?r mod_fcgid muss die erste Zeile ge?ndert werden in:
|
|
92 |
...und für mod_fcgid muss die erste Zeile geändert werden in:
|
|
93 | 93 |
|
94 | 94 |
AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fcgi |
95 | 95 |
|
96 | 96 |
|
97 | 97 |
Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle Zugriffe |
98 | 98 |
auf die einzelnen Scripte werden auf diesen umgeleitet. Dadurch, dass |
99 |
zur Laufzeit ?fter mal Scripte neu geladen werden, gibt es hier kleine
|
|
100 |
Performance-Einbu?en. Trotzdem ist diese Variante einer globalen
|
|
99 |
zur Laufzeit öfter mal Scripte neu geladen werden, gibt es hier kleine
|
|
100 |
Performance-Einbußen. Trotzdem ist diese Variante einer globalen
|
|
101 | 101 |
Benutzung von "AddHandler fastcgi-script .pl" vorzuziehen. |
102 | 102 |
|
103 | 103 |
|
104 |
Es ist m?glich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
|
|
105 |
betreiben. Daf?r bleiben Directorydirektiven bleiben wie oben beschrieben, die
|
|
104 |
Es ist möglich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
|
|
105 |
betreiben. Dafür bleiben Directorydirektiven bleiben wie oben beschrieben, die
|
|
106 | 106 |
URLs werden aber umgeleitet: |
107 | 107 |
|
108 | 108 |
# Zugriff ohne FastCGI |
... | ... | |
118 | 118 |
Achtung: |
119 | 119 |
|
120 | 120 |
Die AddHandler Direktive vom Apache ist entgegen der Dokumentation |
121 |
anscheinend nicht lokal auf das Verzeichnis beschr?nkt sondern global im
|
|
121 |
anscheinend nicht lokal auf das Verzeichnis beschränkt sondern global im
|
|
122 | 122 |
vhost. |
123 | 123 |
|
124 | 124 |
=head2 Entwicklungsaspekte |
125 | 125 |
|
126 |
Wenn ?nderungen in der Konfiguration von Lx-Office gemacht werden, muss der
|
|
126 |
Wenn Änderungen in der Konfiguration von Lx-Office gemacht werden, muss der
|
|
127 | 127 |
Server neu gestartet werden. |
128 | 128 |
|
129 |
Bei der Entwicklung f?r FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
|
|
130 |
dass das Programm in einer Endlosschleife l?uft, m?ssen folgende Aspekte
|
|
129 |
Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
|
|
130 |
dass das Programm in einer Endlosschleife läuft, müssen folgende Aspekte
|
|
131 | 131 |
geachtet werden: |
132 | 132 |
|
133 | 133 |
=head3 Programmende und Ausnahmen: C<warn>, C<die>, C<exit>, C<carp>, C<confess> |
... | ... | |
139 | 139 |
Gleiche, mit ein paar Extraoptionen. C<warn> und C<exit> hingegen werden nicht |
140 | 140 |
abgefangen. C<warn> wird direkt nach STDERR, also in Server Log eine Nachricht |
141 | 141 |
schreiben (sofern in der Konfiguration nicht die Warnungen in das Lx-Office Log |
142 |
umgeleitet wurden), und C<exit> wird die Ausf?hrung beenden.
|
|
142 |
umgeleitet wurden), und C<exit> wird die Ausführung beenden.
|
|
143 | 143 |
|
144 | 144 |
Prinzipiell ist es kein Beinbruch, wenn sich der Prozess beendet, fcgi wird ihn |
145 | 145 |
sofort neu starten. Allerdings sollte das die Ausnahme sein. Quintessenz: Bitte |
... | ... | |
148 | 148 |
=head3 Globale Variablen |
149 | 149 |
|
150 | 150 |
Um zu vermeiden, dass Informationen von einem Request in einen anderen gelangen, |
151 |
m?ssen alle globalen Variablen vor einem Request sauber initialisiert werden.
|
|
151 |
müssen alle globalen Variablen vor einem Request sauber initialisiert werden.
|
|
152 | 152 |
Das ist besonders wichtig im C<$::cgi> und C<$::auth> Objekt, weil diese nicht |
153 |
gel?scht werden pro Instanz, sondern persistent gehalten werden.
|
|
153 |
gelöscht werden pro Instanz, sondern persistent gehalten werden.
|
|
154 | 154 |
|
155 | 155 |
In C<SL::Dispatcher> gibt es einen sauber abgetrennten Block der alle |
156 |
kanonischen globalen Variablen listet und erkl?rt. Bitte keine anderen
|
|
157 |
einf?hren ohne das sauber zu dokumentieren.
|
|
156 |
kanonischen globalen Variablen listet und erklärt. Bitte keine anderen
|
|
157 |
einführen ohne das sauber zu dokumentieren.
|
|
158 | 158 |
|
159 | 159 |
Datenbankverbindungen wird noch ein Guide verfasst werden, wie man sichergeht, |
160 | 160 |
dass man die richtige erwischt. |
... | ... | |
174 | 174 |
|
175 | 175 |
=head3 Encoding Awareness |
176 | 176 |
|
177 |
UTF-8 kodierte Installationen sind sehr anf?llig gegen fehlerhfate Encodings
|
|
177 |
UTF-8 kodierte Installationen sind sehr anfällig gegen fehlerhfate Encodings
|
|
178 | 178 |
unter FCGI. latin9 Installationen behandeln falsch kodierte Zeichen eher |
179 | 179 |
unwissend, und geben sie einfach weiter. UTF-8 verweigert bei fehlerhaften |
180 | 180 |
Programmpfaden kurzerhand aus ausliefern. Es wird noch daran gearbeitet alles |
Auch abrufbar als: Unified diff
Dateiencodings auf UTF-8 geändert
Fix für Bug 1375.