示例使用FANO框架,Pascal Web应用程序框架的FastCGI Web应用程序。当不支持FASTCGI时,它将退回CGI应用程序。
该项目是使用Fano CLI命令行工具生成的,以帮助使用Fano Framework帮助脚手架Web应用程序。
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
$ ./tools/config.setup.sh
$ ./build.sh
如果已安装了Fano CLI,则可以使用MOD_FCGID模块设置虚拟主机配置为FastCGI
$ sudo fanocli --deploy-cgid=cgi-fcgi.fano
或作为CGI应用
$ sudo fanocli --deploy-cgi=cgi-fcgi.fano
请从FANO框架文档中读取AS FastCGI应用程序或作为CGI应用程序的部署,以获取更多信息。
如果您没有安装FANO CLI,则需要按照本文档的Web服务器部分手动设置虚拟主机。
打开Internet浏览器,然后访问url http://cgi-fcgi.fano。
确保安装免费的Pascal。跑步
$ fpc -i
如果您看到了Free Pascal Compiler version 3.0.4之类的东西,那么您就可以了。
克隆这个存储库
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
--recursive需要回报,因此Git还可以提取Fano存储库。
如果您丢失了--recursive克隆时的回报,则可能会发现vendor/fano目录是空的。在这种情况下运行
$ git submodule update --init
要将Fano更新为最新的提交,请运行
$ git checkout master && git submodule foreach --recursive git pull origin master
上面的命令将查看此存储库的master分支,并从Fano存储库的master Branch中提取最新更新。
将*.cfg.sample复制到*.cfg 。在build.cfg , build.prod.cfg , build.dev.cfg和run build.sh shell脚本(如果您在Windows上,然后build.cmd )中进行调整。
这些*.cfg文件包含一些免费的Pascal编译器开关,您可以打开/关闭这些开关,以更改可执行文件的编译和生成方式。有关可用编译器开关的完整说明,请咨询免费的Pascal文档。
另外,请根据需要将src/config/config.json.sample复制到src/config/config.json和编辑配置。例如,您可能需要更改baseUrl以匹配自己的基本URL,以便JavaScript或CSS样式表指向纠正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脚本来简化复制这些配置文件。以下命令类似于上面的命令。
$ ./tools/config.setup.sh
$ ./build.sh
默认情况下,它将在public目录中输出二进制可执行文件。
要为不同的环境构建,请设置BUILD_TYPE环境变量。
$ BUILD_TYPE=prod ./build.sh
构建过程将使用vendor/fano/fano.cfg和build.cfg中build.prod.cfg的编译器配置。默认情况下, build.prod.cfg包含一些编译器开关,这些交换机将积极地优化速度和尺寸可执行文件。
$ BUILD_TYPE=dev ./build.sh
构建过程build.dev.cfg使用vendor/fano/fano.cfg和build.cfg中定义的编译器配置。
如果未设置BUILD_TYPE环境变量,则将假定生产环境。
汇编将输出可执行到EXEC_OUTPUT_DIR环境变量中定义的目录。默认情况下是public目录。
$ EXEC_OUTPUT_DIR=/path/to/public/dir ./build.sh
编译将使用EXEC_OUTPUT_NAME环境变量中定义的可执行文件名。默认情况下是app.cgi文件名。
$ EXEC_OUTPUT_NAME=index.cgi ./build.sh
设置虚拟主机。请咨询您使用的Web服务器文档。
例如,在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>
在Apache上,您需要启用CGI模块,例如mod_cgi或mod_cgid 。如果未加载CGI模块,则在虚拟主机上方会导致app.cgi下载而不是执行。
例如,在Debian上,这将启用mod_cgi模块。
$ sudo a2enmod cgi
$ sudo systemctl restart apache2
要AddHandler FastCGI部署
AddHandler fcgid-script .cgi
例如,取决于服务器设置,例如,如果使用.htaccess ,请添加以下代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.cgi [L]
</IfModule>
并将.htaccess文件与app.cgi文件(即在public目录中)放在同一目录中。
.htaccess的内容基本上告诉Apache直接服务现有文件/目录。对于任何不存在的文件/目录,请将其传递给我们的应用程序。
$ cd public
$ REQUEST_METHOD=GET
REQUEST_URI=/test/test
SERVER_NAME=juhara.com
./app.cgi
tools/simulate.run.sh是bash脚本,可用于简化Shell中的模拟运行应用程序。
$ ./tools/simulate.run.sh
或更改访问路由,设置REQUEST_URI变量。
$ REQUEST_URI=/test/test ./tools/simulate.run.sh
这类似于模拟浏览器请求此页面,例如
$ wget -O- http://[your fano app hostname]/test/test
但是,使用tools/simulate.run.sh运行运行允许您查看heaptrc单元的输出以检测内存泄漏(如果您在build.dev.cfg中启用-gh开关)。
您需要仅部署可执行的二进制文件和任何支持文件,例如HTML模板,图像,CSS样式表,应用程序配置。在部署计算机中不需要任何pas或inc文件或Shell脚本,以便运行应用程序。
因此,对于此存储库,您需要将public , Templates , config和storages目录复制到部署计算机。确保storages目录由Web服务器写作。
运行build.sh脚本时,您可能会在警告后遇到:
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
这是自由Pascal和GNU链接器之间的已知问题。请参阅常见问题解答:链接。RES语法错误或“您忘记-t?”
但是,此警告很小,可以忽略。它不会影响输出可执行文件。
有时免费的pascal无法编译您的代码,因为例如,您删除了一个单元源代码(.pas),但是旧生成的单元(.ppu,.o,.a文件)仍然存在,或者当您在git分支之间切换时。解决方案是删除这些文件。
默认情况下,生成的编译单元位于bin/unit目录中。但是不要在此目录中删除README.md文件,因为Git并未忽略它。
$ rm bin/unit/*.ppu
$ rm bin/unit/*.o
$ rm bin/unit/*.rsj
$ rm bin/unit/*.a
以下shell命令将删除除README.md文件外的bin/unit目录中的所有文件。
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
提供了tools/clean.sh脚本来简化此任务。
免费的Pascal支持Windows作为目标操作系统,但是,该存储库尚未在Windows上进行测试。要定位Windows,在build.cfg中,用-Twin64替换编译器开关-Tlinux ,并将输入行#-WC替换为-WC 。
虽然您可以使用Lazarus IDE,但这不是强制性工具。任何用于代码编辑的文本编辑器(Atom,Visual Studio Code,Sublime,VIM等)都应该足够。