Contoh Aplikasi Web FastCGI Menggunakan Kerangka Fano, Kerangka Aplikasi Web Pascal. Ini akan mundur ke aplikasi CGI ketika FastCGI tidak didukung.
Proyek ini dihasilkan menggunakan alat baris perintah Fano CLI untuk membantu aplikasi web perancah menggunakan Fano Framework.
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
$ ./tools/config.setup.sh
$ ./build.sh
Jika Anda telah menginstal Fano CLI, Anda dapat mengatur konfigurasi host virtual sebagai fastcgi menggunakan modul mod_fcgid dengan menjalankan
$ sudo fanocli --deploy-cgid=cgi-fcgi.fano
atau sebagai aplikasi CGI
$ sudo fanocli --deploy-cgi=cgi-fcgi.fano
Harap baca Deploy sebagai Aplikasi FastCGI atau Deploy sebagai Aplikasi CGI dari Dokumentasi Kerangka Fano untuk informasi lebih lanjut.
Jika Anda tidak menginstal Fano CLI, Anda perlu mengatur host virtual secara manual seperti yang ditunjukkan di Run dengan bagian server web dari dokumen ini.
Buka Browser Internet dan buka URL http: //cgi-fcgi.fano.
Pastikan Pascal gratis dipasang. Berlari
$ fpc -i
Jika Anda melihat sesuatu seperti Free Pascal Compiler version 3.0.4 , Anda siap melakukannya.
Kloning repositori ini
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
--recursive diperlukan jadi git juga menarik repositori fano.
Jika Anda hilang --recursive saat Anda mengkloning, Anda mungkin menemukan bahwa direktori vendor/fano kosong. Dalam hal ini jalankan
$ git submodule update --init
Untuk memperbarui Fano ke komit terbaru, jalankan
$ git checkout master && git submodule foreach --recursive git pull origin master
Perintah di atas akan checkout ke master cabang repositori ini dan menarik pembaruan terbaru dari cabang master repositori fano.
Salin *.cfg.sample to *.cfg . Lakukan penyesuaian seperti yang Anda butuhkan di build.cfg , build.prod.cfg , build.dev.cfg dan jalankan skrip shell build.sh (jika Anda berada di windows, maka build.cmd ).
File *.cfg ini berisi beberapa sakelar kompiler pascal gratis yang dapat Anda nyalakan/dimatikan untuk mengubah cara yang dapat dieksekusi dikompilasi dan dihasilkan. Untuk penjelasan lengkap tentang sakelar kompiler yang tersedia, konsultasikan dokumentasi Pascal gratis.
Juga salin src/config/config.json.sample ke src/config/config.json dan edit konfigurasi sesuai kebutuhan. Misalnya, Anda mungkin perlu mengubah baseUrl untuk mencocokkan URL dasar Anda sendiri sehingga JavaScript atau CSS Stylesheets menunjuk untuk memperbaiki 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 skrip shell disediakan untuk menyederhanakan menyalin file konfigurasi tersebut. Perintah shell berikut mirip dengan perintah di atas.
$ ./tools/config.setup.sh
$ ./build.sh
Secara default, itu akan menghasilkan biner yang dapat dieksekusi di Direktori public .
Untuk membangun untuk lingkungan yang berbeda, atur variabel lingkungan BUILD_TYPE .
$ BUILD_TYPE=prod ./build.sh
Proses build akan menggunakan konfigurasi kompiler yang ditentukan dalam vendor/fano/fano.cfg , build.cfg dan build.prod.cfg . Secara default, build.prod.cfg berisi beberapa sakelar kompiler yang akan secara agresif mengoptimalkan executable baik dalam kecepatan dan ukuran.
$ BUILD_TYPE=dev ./build.sh
Proses Build akan menggunakan konfigurasi kompiler yang ditentukan dalam vendor/fano/fano.cfg , build.cfg dan build.dev.cfg .
Jika variabel lingkungan BUILD_TYPE tidak diatur, lingkungan produksi akan diasumsikan.
Kompilasi akan output dapat dieksekusi ke direktori yang ditentukan dalam variabel lingkungan EXEC_OUTPUT_DIR . Secara default adalah Direktori public .
$ EXEC_OUTPUT_DIR=/path/to/public/dir ./build.sh
Kompilasi akan menggunakan nama file yang dapat dieksekusi sebagaimana didefinisikan dalam variabel lingkungan EXEC_OUTPUT_NAME . Secara default adalah nama file app.cgi .
$ EXEC_OUTPUT_NAME=index.cgi ./build.sh
Siapkan host virtual. Silakan berkonsultasi dengan dokumentasi server web yang Anda gunakan.
Misalnya di 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>
Di Apache, Anda perlu mengaktifkan modul CGI, seperti mod_cgi atau mod_cgid . Jika modul CGI tidak dimuat, host virtual di atas akan menyebabkan app.cgi diunduh alih -alih dieksekusi.
Misalnya, di Debian, ini akan mengaktifkan modul mod_cgi .
$ sudo a2enmod cgi
$ sudo systemctl restart apache2
Untuk digunakan sebagai fastcgi, ganti baris AddHandler di atas dengan
AddHandler fcgid-script .cgi
Bergantung pada pengaturan server Anda, misalnya, jika Anda menggunakan .htaccess , tambahkan kode berikut:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.cgi [L]
</IfModule>
dan menempatkan file .htaccess di direktori yang sama dengan file app.cgi (yaitu, di direktori public ).
Konten .htaccess pada dasarnya memberi tahu Apache untuk melayani file/direktori yang ada secara langsung. Untuk file/direktori yang tidak ada, berikan ke aplikasi kami.
$ cd public
$ REQUEST_METHOD=GET
REQUEST_URI=/test/test
SERVER_NAME=juhara.com
./app.cgi
tools/simulate.run.sh adalah skrip bash yang dapat digunakan untuk menyederhanakan aplikasi menjalankan simulasi di shell.
$ ./tools/simulate.run.sh
atau untuk mengubah rute ke akses, atur variabel REQUEST_URI .
$ REQUEST_URI=/test/test ./tools/simulate.run.sh
Ini mirip dengan mensimulasikan browser yang meminta halaman ini, misalnya,
$ wget -O- http://[your fano app hostname]/test/test
Namun, berjalan menggunakan tools/simulate.run.sh memungkinkan Anda untuk melihat output unit heaptrc untuk mendeteksi kebocoran memori (jika Anda mengaktifkan -gh sakelar di build.dev.cfg ).
Anda perlu menggunakan hanya biner yang dapat dieksekusi dan file pendukung apa pun seperti templat HTML, gambar, stylesheet CSS, konfigurasi aplikasi. File pas atau inc atau skrip shell apa pun tidak diperlukan dalam mesin penyebaran untuk dijalankan aplikasi.
Jadi untuk repositori ini, Anda perlu menyalin direktori public , Templates , config , dan storages ke mesin penyebaran Anda. Pastikan direktori storages dapat ditulis oleh server web.
Saat menjalankan skrip build.sh , Anda dapat menemukan peringatan berikut:
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
Ini diketahui masalah antara linker Pascal dan GNU gratis. Lihat FAQ: Link.Res Kesalahan Sintaks, atau "Apakah Anda lupa -t?"
Namun, peringatan ini kecil dan dapat diabaikan. Itu tidak mempengaruhi output yang dapat dieksekusi.
Kadang -kadang Pascal gratis tidak dapat mengkompilasi kode Anda karena, misalnya, Anda menghapus kode sumber unit (.pas) tetapi unit lama yang dihasilkan (.ppu, .o,.. .A file) masih ada atau ketika Anda beralih di antara cabang git. Solusi adalah menghapus file -file tersebut.
Secara default, unit yang dikompilasi yang dihasilkan ada di direktori bin/unit . Tapi jangan hapus file README.md di dalam direktori ini, karena tidak diabaikan oleh git.
$ rm bin/unit/*.ppu
$ rm bin/unit/*.o
$ rm bin/unit/*.rsj
$ rm bin/unit/*.a
Perintah Shell berikut akan menghapus semua file di dalam direktori bin/unit kecuali file README.md .
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
tools/clean.sh Script disediakan untuk menyederhanakan tugas ini.
Pascal gratis mendukung Windows sebagai sistem operasi target, namun, repositori ini belum diuji pada Windows. Untuk menargetkan windows, di build.cfg ganti sakelar kompiler -Tlinux dengan -Twin64 dan garis uncomment #-WC menjadi -WC .
Meskipun Anda dapat menggunakan Lazarus IDE, itu bukan alat wajib. Setiap editor teks untuk pengeditan kode (atom, kode studio visual, luhur, vim dll) sudah cukup.