-
Notifications
You must be signed in to change notification settings - Fork 15
/
README-fastcgi
137 lines (95 loc) · 5.2 KB
/
README-fastcgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
Para hacer funcionar fastcgi, primero, recompilar otra vez para Linux.
Esto nos creará un ejecutable eneboo-fastcgi.
Este ejecutable únicamente necesita el parámetro de conexión silenciosa.
Por ejemplo:
./eneboo-build-linux64-dba/bin/eneboo-fcgi -silentconn eneboo1:postgres:PostgreSQL:127.0.0.1:5432:1234
Si se lanza de forma normal, es un ejecutable CGI.
Podemos pasar el parámetro QUERY_STRING usando export.
export QUERY_STRING="flfactppal.valorDefectoEmpresa:codalmacen"
Para lanzar como fastcgi, habría que usar spawn-fcgi.
Hay básicamente dos modos, para depurar y para producción.
Para depurar lanzamos con "-n", que evita el fork() y vemos lo que está pasando:
spawn-fcgi -n -s /tmp/eneboo.fcgi.socket -M 0777 -- $(pwd)/eneboo-build-linux64-dba/bin/eneboo-fcgi -silentconn eneboo1:postgres:PostgreSQL:127.0.0.1:5432:1234
Para producción lanzamos con "-F4" para lanzar 4 procesos en paralelo:
spawn-fcgi -F4 -s /tmp/eneboo.fcgi.socket -M 0777 -- $(pwd)/eneboo-build-linux64-dba/bin/eneboo-fcgi -silentconn eneboo1:postgres:PostgreSQL:127.0.0.1:5432:1234
Para detener un proceso con fork no está aún claro cual es un buen método. Por el momento se puede hacer un:
pkill -f eneboo-fastcgi
Pero esto puede parar otros procesos no deseados.
NOTA: para lanzar de forma completamente desatendida probablemente necesitemos xvfb, ya que Qt3 no tiene
soporte para headless.
El resto, es tener un servidor web con fastcgi. Cuasi todos tienen soporte.
En mi caso probé lighttpd con fastcgi, para ello agregué al final de la configuración: (además de agregar el modulo fastcgi a la configuracion)
fastcgi.server = (
"/" =>
((
"socket" => "/home/deavid/git/eneboo/eneboo.fcgi.socket",
"check-local" => "disable",
"docroot" => "/" # remote server may use
# its own docroot
))
)
Con esto, cuando se visita una página en ese servidor, todo lo que pongamos detrás del interrogante (?)
será enviado como query string, por lo tanto, consultamos desde el navegador a modo de prueba:
http://127.0.0.1/?flfactppal.valorDefectoEmpresa:codpago
Y debería devolvernos "CONT" o la forma de pago configurada.
CUIDADO!!! Esta versión de fastCGI es muy prematura. La seguridad es *NULA*. El formato de paso de parámetros deja mucho que desear, y probablemente cambie.
Si alguien prueba esto, que sea en un entorno controlado, de pruebas y NUNCA JAMÁS en produción ni en internet... a no ser que esté conectado a un servidor
de base de datos que se pueda borrar por completo (dado que es posible afectar a otras bases de datos usando funciones de Eneboo)
Espero que sea útil!
==========================================
ACTUALIZACION:::::
==========================================
Ahora todas las consultas pasan por QSA directamente y allí hay que hacer todo el trabajo.
Para facilitar las pruebas, aquí va una función de ejemplo: (fichero flfacppal.qs)
class oficial (...)
function fcgiProcessRequest() {
return this.ctx.oficial_fcgiProcessRequest();
}
(...)
function oficial_fcgiProcessRequest()
{
//debug("init fcgi request");
var fcgi = new FLFastCgi();
debug("REQUEST_METHOD: " + fcgi.getEnv("REQUEST_METHOD") + " : URI:" + fcgi.getEnv("REQUEST_URI") );
fcgi.write("Content-type: text/html\r\n");
fcgi.write("\r\n");
fcgi.write("<h1>Hola mundo desde QSA</h1>");
fcgi.write('<form action="." method="POST">');
fcgi.write(' First name: <input type="text" name="fname"><br>');
fcgi.write(' Last name: <input type="text" name="lname"><br>');
fcgi.write(' <input type="submit" value="Submit">');
fcgi.write('</form> ');
var urlop = new QUrlOperator();
var postdata = fcgi.read();
fcgi.write('<pre style="color: blue">');
fcgi.write(fcgi.xmlentityencode(fcgi.urldecode(postdata)));
fcgi.write('</pre>');
fcgi.write("<pre>");
var envlist = fcgi.getFullEnv();
for (var i in envlist) {
var env = envlist[i];
fcgi.write(env + "\r\n");
}
fcgi.write("</pre>");
fcgi.write("\r\n\r\n");
return "END REQUEST";
}
Ahora hay que agregar "-c flfactppal.fcgiProcessRequest" a la llamada, para que eneboo enrute todas las consultas
a través de esta función:
spawn-fcgi -n -s /tmp/eneboo.fcgi.socket -M 0777 -- ./eneboo-build-linux64-dba/bin/eneboo-fcgi \
-silentconn eneboo1:postgres:PostgreSQL:127.0.0.1:5432:1234 -c flfactppal.fcgiProcessRequest
==========================================
ENEBOO-FASTCGI EN WINDOWS :::::
==========================================
Para configurar apache 2.2+:
01. descargamos módulo FastCGI de : http://www.fastcgi.com/dist/mod_fastcgi-2.4.6-AP22.dll
02. renombramos dll a mod_fastcgi.so
03. Copiamod mod_fastcgi en la carpeta de módulos de apache
04. En httpd.conf añadimos la siguiente linea:
LoadModule fastcgi_module modules/mod_fastcgi.so
05. Definimos el servidor externo en httpd.conf:
FastCgiExternalServer "C:\wamp\www\eneboo.fcgi" -host localhost:1160 -idle-timeout 5 -flush
Para hacer la llamada desde terminal (eneboo 2.4.5-rc2 o sup.):
C:\eneboo-build-win32-dba\bin>spawn-fcgi.exe -f "eneboo-fcgi.exe -silentconn dbname:usuario_sql:PostgreSQL:ip_servidor_sql:puerto_sql:password_sql -c flfactppal.fcgiProcessRequest" -a 127.0.0.1 -p 1160
Fuentes spawn-fcgi-win32:
https://github.com/mkottman/lighttpd-1.5-mingw/blob/master/spawn-fcgi-win32.c