Beispiel FastCGI -Webanwendung mit Fano Framework, Pascal Web Application Framework. Es fällt auf die CGI -Anwendung zurück, wenn FastCGI nicht unterstützt wird.
Dieses Projekt wird mit Fano CLI -Befehlszeilen -Tools generiert, um die Webanwendung mit Fano Framework zu unterstützen.
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
$ ./tools/config.setup.sh
$ ./build.sh
Wenn Sie Fano CLI installiert haben, können Sie die virtuelle Hostkonfiguration mithilfe des Moduls mod_fcgid durch Ausführen als FASTCGI einrichten
$ sudo fanocli --deploy-cgid=cgi-fcgi.fano
oder als CGI -Anwendung
$ sudo fanocli --deploy-cgi=cgi-fcgi.fano
Bitte lesen Sie die Bereitstellung als FASTCGI -Anwendung oder Bereitstellung als CGI -Anwendung aus FANO Framework -Dokumentation, um weitere Informationen zu erhalten.
Wenn Sie Fano CLI nicht installiert haben, müssen Sie den virtuellen Host manuell einrichten, wie in einem Webserverabschnitt dieses Dokuments ausführen .
Öffnen Sie den Internetbrowser und gehen Sie zu URL http: //cgi-fcgi.fano.
Stellen Sie sicher, dass kostenlos Pascal installiert ist. Laufen
$ fpc -i
Wenn Sie so etwas wie Free Pascal Compiler version 3.0.4 sehen, können Sie loslegen.
Klonen Sie dieses Repository
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
--recursive ist erforderlich, sodass Git auch Fano-Repository erfolgt.
Wenn Sie fehlen --recursive , wenn Sie klonen, finden Sie möglicherweise, dass das vendor/fano -Verzeichnis leer ist. In diesem Fall laufen
$ git submodule update --init
Um Fano auf sein neuestes Commit zu aktualisieren, rennen Sie
$ git checkout master && git submodule foreach --recursive git pull origin master
Der obere Befehl überprüft den master -Zweig dieses Repositorys und zieht das neueste Update von master Branch of Fano Repository.
Kopieren *.cfg.sample to *.cfg . Nehmen Sie die Anpassung an, wie Sie in build.cfg , build.prod.cfg , build.dev.cfg und run build.sh Shell -Skript ausführen (wenn Sie unter Windows sind, dann build.cmd ).
Diese *.cfg -Dateien enthalten einige kostenlose Pascal -Compiler -Switches, die Sie ein-/ausschalten können, um die Kompilierung der Ausführung zu ändern und zu erzeugen. Für die vollständige Erläuterung zu verfügbaren Compiler -Switches finden Sie eine kostenlose Pascal -Dokumentation.
Kopieren Sie außerdem src/config/config.json.sample in src/config/config.json und bearbeiten Sie die Konfiguration nach Bedarf. Sie müssen beispielsweise baseUrl so ändern, dass Sie Ihre eigene Basis -URL entsprechen, damit JavaScript oder CSS -Stylesheets auf die korrekte URL verweisen.
$ 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 -Skript wird bereitgestellt, um das Kopieren dieser Konfigurationsdateien zu vereinfachen. Der folgende Shell -Befehl ähnelt dem obigen Befehl.
$ ./tools/config.setup.sh
$ ./build.sh
Standardmäßig wird die ausführbare Binärdatei im public Verzeichnis ausgegeben.
Um für eine andere Umgebung zu erstellen, setzen Sie die Umgebungsvariable BUILD_TYPE .
$ BUILD_TYPE=prod ./build.sh
Der Erstellungsprozess verwendet Compiler -Konfiguration, die in vendor/fano/fano.cfg , build.cfg und build.prod.cfg definiert sind. Standardmäßig enthält build.prod.cfg einige Compiler -Switches, die die ausführliche Datei sowohl in Geschwindigkeit als auch in Größe aggressiv optimieren.
$ BUILD_TYPE=dev ./build.sh
Der Erstellungsprozess verwendet Compiler -Konfiguration, die in vendor/fano/fano.cfg , build.cfg und build.dev.cfg definiert sind.
Wenn die Umgebungsvariable BUILD_TYPE nicht festgelegt ist, wird die Produktionsumgebung übernommen.
Die Kompilierung wird ausführbar in das in der Umgebungsvariablen EXEC_OUTPUT_DIR definierte Verzeichnis ausgegeben. Standardmäßig ist das public Verzeichnis.
$ EXEC_OUTPUT_DIR=/path/to/public/dir ./build.sh
Die Kompilierung verwendet den ausführbaren Dateinamen wie in der Umgebungsvariablen EXEC_OUTPUT_NAME . Standardmäßig ist app.cgi Dateiname.
$ EXEC_OUTPUT_NAME=index.cgi ./build.sh
Richten Sie einen virtuellen Host ein. Bitte konsultieren Sie die Dokumentation des von Ihnen verwendeten Webservers.
Zum Beispiel auf 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>
Auf Apache müssen Sie das CGI -Modul wie mod_cgi oder mod_cgid aktivieren. Wenn das CGI -Modul nicht geladen wird, wird der obere virtuelle Host app.cgi anstelle von ausgeführt heruntergeladen.
Auf Debian können Sie beispielsweise das Modul mod_cgi aktivieren.
$ sudo a2enmod cgi
$ sudo systemctl restart apache2
Um als FASTCGI bereitzustellen, ersetzen Sie AddHandler -Linie oben durch durch
AddHandler fcgid-script .cgi
Fügen Sie beispielsweise beispielsweise bei Ihrem Server .htaccess den folgenden Code hinzu:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.cgi [L]
</IfModule>
und setzen Sie die Datei .htaccess in das gleiche Verzeichnis wie app.cgi -Datei (dh im public Verzeichnis).
Inhalt von .htaccess fordert Apache im Grunde auf, vorhandene Dateien/Verzeichnisse direkt zu dienen. Geben Sie sie für nicht existierende Dateien/Verzeichnisse an unsere Anwendung weiter.
$ cd public
$ REQUEST_METHOD=GET
REQUEST_URI=/test/test
SERVER_NAME=juhara.com
./app.cgi
tools/simulate.run.sh ist ein Bash -Skript, mit dem die Simulation der Auslaufanwendung in Shell vereinfacht werden kann.
$ ./tools/simulate.run.sh
oder um den Weg zum Zugriff zu ändern, setzen Sie die Variable REQUEST_URI fest.
$ REQUEST_URI=/test/test ./tools/simulate.run.sh
Dies ähnelt der Simulation von Browser, die beispielsweise diese Seite anfordern.
$ wget -O- http://[your fano app hostname]/test/test
Wenn Sie jedoch mit tools/simulate.run.sh ausgeführt werden, können Sie die Ausgabe der heaptrc -Einheit zum Erkennen von Speicherlecks anzeigen (wenn Sie -gh -Schalter in build.dev.cfg aktivieren).
Sie müssen nur ausführbare Binärdateien und unterstützende Dateien wie HTML -Vorlagen, Bilder, CSS -Stylesheets und Anwendungskonfiguration bereitstellen. Alle pas oder inc -Dateien oder Shell -Skripte werden im Bereitstellungsgerät nicht benötigt, damit die Auftragsanwendung ausgeführt wird.
Für dieses Repository müssen Sie Verzeichnisse public , Templates , config und storages in Ihren Bereitstellungsgerät kopieren. Stellen Sie sicher, dass das storages vom Webserver beschreibbar ist.
Beim Ausführen von build.sh -Skript können Sie nach der Warnung begegnen:
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
Dies ist bekannt, dass das Problem zwischen kostenlosen Pascal und GNU -Linker bekannt ist. Siehe FAQ: Link.res Syntax -Fehler oder "Haben Sie -t vergessen?"
Diese Warnung ist jedoch geringfügig und kann ignoriert werden. Es wirkt sich nicht auf die ausführbare Ausgabe aus.
Manchmal kann kostenloser Pascal Ihren Code nicht kompilieren, da Sie beispielsweise einen Quellcode (.pas) der Einheit gelöscht haben, aber eine alte generierte Einheit (.ppu, .o, .a -Dateien) immer noch da oder wenn Sie zwischen Git -Zweigen wechseln. Lösung besteht darin, diese Dateien zu entfernen.
Standardmäßig sind erzeugte kompilierte Einheiten im bin/unit -Verzeichnis. Löschen Sie jedoch in diesem Verzeichnis die Datei README.md nicht, da sie nicht von Git ignoriert wird.
$ rm bin/unit/*.ppu
$ rm bin/unit/*.o
$ rm bin/unit/*.rsj
$ rm bin/unit/*.a
Der folgende Shell -Befehl entfernen alle Dateien im Verzeichnis von bin/unit mit Ausnahme README.md -Datei.
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
tools/clean.sh Skript wird bereitgestellt, um diese Aufgabe zu vereinfachen.
Free Pascal unterstützt Windows als Zielbetriebssystem. Dieses Repository wird jedoch noch nicht unter Windows getestet. Um Windows zu zielen, ersetzen Sie in build.cfg Compiler Switch -Tlinux durch -Twin64 und die Kontrolllinie #-WC , um -WC zu werden.
Während Sie Lazarus IDE verwenden können, ist es kein obligatorisches Werkzeug. Jeder Texteditor für die Codebearbeitung (Atom, Visual Studio Code, Sublime, VIM usw.) sollte ausreichen.