Ejemplo de aplicación web FASTCGI usando Fano Framework, Pascal Web Application Framework. Se retirará a la aplicación CGI cuando FastCGI no sea compatible.
Este proyecto se genera utilizando herramientas de línea de comandos FANO CLI para ayudar a la aplicación web de andamios utilizando Fano Framework.
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
$ ./tools/config.setup.sh
$ ./build.sh
Si tiene instalado Fano CLI, puede configurar la configuración del host virtual como FASTCGI usando el módulo mod_fcgid ejecutando
$ sudo fanocli --deploy-cgid=cgi-fcgi.fano
o como aplicación CGI
$ sudo fanocli --deploy-cgi=cgi-fcgi.fano
Lea la implementación de la aplicación FASTCGI o la implementa como la aplicación CGI desde la documentación de Fano Framework para obtener más información.
Si no tiene instalado Fano CLI, debe configurar el host virtual manualmente como se muestra en la ejecución con una sección de servidor web de este documento.
Abra el navegador de Internet y vaya a URL http: //cgi-fcgi.fano.
Asegúrese de que esté instalado Pascal gratis. Correr
$ fpc -i
Si ve algo como Free Pascal Compiler version 3.0.4 , está listo para comenzar.
Clon este repositorio
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
--recursive necesita recursión, por lo que Git también extrae el repositorio de Fano.
Si te falta --recursive cuando clonas, puede encontrar que el directorio vendor/fano está vacío. En este caso Run
$ git submodule update --init
Para actualizar a Fano a su último compromiso, ejecute
$ git checkout master && git submodule foreach --recursive git pull origin master
El comando anterior se verá a la rama master de este repositorio y extraerá la última actualización de la rama master del repositorio de Fano.
Copiar *.cfg.sample a *.cfg . Realice el ajuste como sea necesario en build.cfg , build.prod.cfg , build.dev.cfg y ejecute build.sh shell script (si está en Windows, luego build.cmd ).
Estos archivos *.cfg contienen algunos interruptores de compilador Pascal gratuitos que puede encender/apagar para cambiar la forma en que se compila y generando ejecutables. Para una explicación completa sobre los interruptores del compilador disponible, consulte la documentación de Pascal gratuita.
También copie src/config/config.json.sample a src/config/config.json y edite la configuración según sea necesario. Por ejemplo, es posible que deba cambiar baseUrl para que coincida con su propia URL base, por lo que JavaScript o CSS Styles hojas apuntan a corregir la URL.
$ cp config/config.json.sample config/config.json
$ cp build.prod.cfg.sample build.prod.cfg
$ cp build.dev.cfg.sample build.dev.cfg
$ cp build.cfg.sample build.cfg
$ ./build.sh
tools/config.setup.sh shell script se proporciona para simplificar la copia de esos archivos de configuración. El siguiente comando Shell es similar al comando anterior.
$ ./tools/config.setup.sh
$ ./build.sh
Por defecto, generará ejecutable binario en directorio public .
Para construir para un entorno diferente, establezca la variable de entorno BUILD_TYPE .
$ BUILD_TYPE=prod ./build.sh
El proceso de compilación utilizará la configuración del compilador definida en vendor/fano/fano.cfg , build.cfg y build.prod.cfg . Por defecto, build.prod.cfg contiene algunos interruptores de compiladores que optimizarán agresivamente el ejecutable tanto en velocidad como en tamaño.
$ BUILD_TYPE=dev ./build.sh
El proceso de compilación utilizará la configuración del compilador definida en vendor/fano/fano.cfg , build.cfg y build.dev.cfg .
Si no se establece la variable de entorno BUILD_TYPE , se asumirá el entorno de producción.
La compilación emitirá ejecutable a directorio definido en la variable de entorno EXEC_OUTPUT_DIR . Por defecto es el directorio public .
$ EXEC_OUTPUT_DIR=/path/to/public/dir ./build.sh
La compilación utilizará el nombre de archivo ejecutable como se define en la variable de entorno EXEC_OUTPUT_NAME . Por defecto es app.cgi FileName.
$ EXEC_OUTPUT_NAME=index.cgi ./build.sh
Configurar un host virtual. Consulte la documentación del servidor web que usa.
Por ejemplo en Apache,
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /home/example/public
<Directory "/home/example/public">
Options +ExecCGI
AllowOverride FileInfo
Require all granted
DirectoryIndex app.cgi
AddHandler cgi-script .cgi
</Directory>
</VirtualHost>
En Apache, deberá habilitar el módulo CGI, como mod_cgi o mod_cgid . Si el módulo CGI no está cargado, el host virtual anterior causará que se descargue app.cgi en lugar de ejecutar.
Por ejemplo, en Debian, esto habilitará el módulo mod_cgi .
$ sudo a2enmod cgi
$ sudo systemctl restart apache2
Para implementar como FastCGI, reemplace la línea AddHandler arriba con
AddHandler fcgid-script .cgi
Dependiendo de la configuración de su servidor, por ejemplo, si usa .htaccess , agregue el siguiente código:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.cgi [L]
</IfModule>
y coloque el archivo .htaccess en el mismo directorio que el archivo app.cgi (es decir, en el directorio public ).
El contenido de .htaccess básicamente le dice a Apache que sirva directamente archivos/directorios existentes. Para cualquier archivo/directorios inexistentes, paselos a nuestra aplicación.
$ cd public
$ REQUEST_METHOD=GET
REQUEST_URI=/test/test
SERVER_NAME=juhara.com
./app.cgi
tools/simulate.run.sh es un script bash que se puede usar para simplificar la aplicación de ejecución simulada en shell.
$ ./tools/simulate.run.sh
o para cambiar la ruta para acceder, establezca la variable REQUEST_URI .
$ REQUEST_URI=/test/test ./tools/simulate.run.sh
Esto es similar a la simulación de navegador solicitando esta página, por ejemplo,
$ wget -O- http://[your fano app hostname]/test/test
Sin embargo, ejecutar con tools/simulate.run.sh le permite ver la salida de la unidad heaptrc para detectar la fuga de memoria (si habilita -gh Switch en build.dev.cfg ).
Debe implementar solo binario ejecutable y cualquier archivo de soporte, como plantillas HTML, imágenes, hojas de estilo CSS, configuración de aplicaciones. Cualquier archivo pas o inc o scripts de shell no es necesario en la máquina de implementación para que la aplicación se ejecute.
Entonces, para este repositorio, deberá copiar directorios public , Templates , config y storages a su máquina de implementación. Asegúrese de que el directorio storages sea WRITITY en Web Server.
Al ejecutar el script build.sh , puede encontrar después de la advertencia:
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
Este es un problema conocido entre Pascal gratuito y enlazador GNU. Vea las preguntas frecuentes: Error de sintaxis Link.res, o "¿Olvidaste -t?"
Sin embargo, esta advertencia es menor y puede ser ignorada. No afecta el ejecutable de salida.
En algún momento, Pascal gratuito no puede compilar su código porque, por ejemplo, eliminó un código fuente de la unidad (.pas) pero una unidad generada antigua (.ppu, .o, .a archivos) todavía allí o cuando cambia entre ramas GIT. La solución es eliminar esos archivos.
Por defecto, las unidades compiladas generadas se encuentran en el directorio bin/unit . Pero no elimine el archivo README.md dentro de este directorio, ya que Git no lo ignora.
$ rm bin/unit/*.ppu
$ rm bin/unit/*.o
$ rm bin/unit/*.rsj
$ rm bin/unit/*.a
El siguiente comando shell eliminará todos los archivos dentro del directorio bin/unit excepto el archivo README.md .
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
Se proporciona el script tools/clean.sh para simplificar esta tarea.
Free Pascal admite Windows como sistema operativo objetivo, sin embargo, este repositorio aún no se prueba en Windows. Para apuntar a Windows, en build.cfg reemplazar el interruptor del compilador -Tlinux con -Twin64 y la línea de incommento #-WC para convertirse en -WC .
Si bien puede usar Lazarus IDE, no es una herramienta obligatoria. Cualquier editor de texto para la edición de código (Atom, Visual Studio Code, Sublime, VIM, etc.) debería ser suficiente.