Fano Frameworkを使用したFASTCGI Webアプリケーションの例、Pascal Webアプリケーションフレームワーク。 FastCGIがサポートされていない場合、CGIアプリケーションに転落します。
このプロジェクトは、Fano CLIコマンドラインツールを使用して生成され、Fano Frameworkを使用してWebアプリケーションの足場を支援します。
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
$ ./tools/config.setup.sh
$ ./build.sh
FanoCLIがインストールされている場合、実行してMOD_FCGIDモジュールを使用して、仮想ホスト構成をFASTCGIとしてセットアップできます
$ sudo fanocli --deploy-cgid=cgi-fcgi.fano
またはCGIアプリケーションとして
$ sudo fanocli --deploy-cgi=cgi-fcgi.fano
詳細については、FANO FrameworkドキュメントからDEPLOY AS FASTCGIアプリケーションをお読みください。
Fano CLIがインストールされていない場合は、このドキュメントのWebサーバーセクションで実行されるように、仮想ホストを手動でセットアップする必要があります。
インターネットブラウザを開き、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ブランチから最新のアップデートをプルします。
*.cfg.sample to *.cfg 。 build.cfg 、 build.prod.cfg 、 build.dev.cfg 、およびrun build.shシェルスクリプト(windowsにある場合は、 build.cmd )で必要な調整を行います。
これらの*.cfgファイルには、いくつかの無料のPascalコンパイラスイッチが含まれており、オン/オフをオン/オフにして、実行可能性のコンパイルおよび生成方法を変更できます。利用可能なコンパイラスイッチの完全な説明については、無料のPascalドキュメントを参照してください。
また、 src/config/config.json.sampleをsrc/config/config.jsonにコピーし、必要に応じて構成を編集します。たとえば、 baseUrl変更して独自のベースURLに合わせて変更する必要がある場合があるため、JavaScriptまたはCSS StyleSheetsが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シェルスクリプトが提供され、それらの構成ファイルのコピーを簡素化します。次のシェルコマンドは、上記のコマンドに似ています。
$ ./tools/config.setup.sh
$ ./build.sh
デフォルトでは、 publicディレクトリにバイナリ実行ファイルを出力します。
さまざまな環境に合わせて構築するには、 BUILD_TYPE環境変数を設定します。
$ BUILD_TYPE=prod ./build.sh
ビルドプロセスでbuild.cfg vendor/fano/fano.cfgで定義されたコンパイラ構成build.prod.cfg使用します。デフォルトでは、 build.prod.cfgには、スピードとサイズの両方で実行可能性を積極的に最適化するコンパイラスイッチが含まれています。
$ BUILD_TYPE=dev ./build.sh
ビルドプロセスでbuild.cfg vendor/fano/fano.cfgで定義されたコンパイラ構成build.dev.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では、 mod_cgiやmod_cgidなどのCGIモジュールを有効にする必要があります。 CGIモジュールがロードされていない場合、上記の仮想ホストはapp.cgiが実行される代わりにダウンロードされます。
たとえば、Debianでは、 mod_cgiモジュールが有効になります。
$ sudo a2enmod cgi
$ sudo systemctl restart apache2
fastcgiとして展開するには、上記のAddHandler行を置き換えます
AddHandler fcgid-script .cgi
たとえば、サーバーのセットアップに応じて、 .htaccessを使用する場合は、次のコードを追加します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.cgi [L]
</IfModule>
app.cgiファイル(つまり、 publicディレクトリ)と同じディレクトリに.htaccessファイルを配置します。
.htaccessのコンテンツは、基本的にApacheに既存のファイル/ディレクトリを直接提供するよう指示します。存在しないファイル/ディレクトリの場合、それらをアプリケーションに渡します。
$ cd public
$ REQUEST_METHOD=GET
REQUEST_URI=/test/test
SERVER_NAME=juhara.com
./app.cgi
tools/simulate.run.shは、シェルでの実行アプリケーションのシミュレーションを簡素化するために使用できるBASHスクリプトです。
$ ./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ファイルまたはシェルスクリプトは必要ありません。
したがって、このリポジトリでは、展開機にpublic 、 Templates 、 configおよびstoragesディレクトリをコピーする必要があります。 storagesディレクトリがWebサーバーによって書き込み可能であることを確認してください。
build.shスクリプトを実行するとき、次の警告に遭遇する可能性があります。
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
これは、Free PascalとGNUリンカーの間で既知の問題です。 FAQ:link.res構文エラーを参照してください、または「忘れましたか?」
ただし、この警告は軽微で、無視できます。出力実行可能には影響しません。
たとえば、ユニットソースコード(.pas)を削除しましたが、古い生成ユニット(.pu、.o、.aファイル)を削除するか、gitブランチを切り替えると、無料のPascalがコードをコンパイルできません。解決策は、これらのファイルを削除することです。
デフォルトでは、生成されたコンパイルされたユニットはbin/unitディレクトリにあります。ただし、GITで無視されていないため、このディレクトリ内のREADME.mdファイルを削除しないでください。
$ rm bin/unit/*.ppu
$ rm bin/unit/*.o
$ rm bin/unit/*.rsj
$ rm bin/unit/*.a
次のシェルコマンドは、 README.mdファイルを除くbin/unitディレクトリ内のすべてのファイルを削除します。
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
このタスクを簡素化するためにtools/clean.shスクリプトが提供されています。
Free PascalはターゲットオペレーティングシステムとしてWindowsをサポートしていますが、このリポジトリはWindowsでまだテストされていません。 Windowsをターゲットにするには、 build.cfgで、コンパイラスイッチ-Tlinux -Twin64とuncomment line #-WC -WCに置き換えます。
Lazarus IDEを使用できますが、必須ツールではありません。コード編集(Atom、Visual Studio Code、Sublime、VIMなど)のテキストエディターで十分です。