示例使用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等)都應該足夠。