Пример FastCgi Web Application с использованием Fano Framework, Pascal Web Application Framework. Это приведет к приложению CGI, когда FastCGI не поддерживается.
Этот проект генерируется с использованием инструментов командной строки FANO CLI, чтобы помочь веб -приложению для каркасов с использованием Fano Framework.
$ git clone [email protected]:fanofamework/fano-cgi-fcgi.git --recursive
$ ./tools/config.setup.sh
$ ./build.sh
Если у вас установлен FANO CLI, вы можете настроить конфигурацию виртуального хоста в качестве FASTCGI, используя модуль MOD_FCGID, запустив
$ sudo fanocli --deploy-cgid=cgi-fcgi.fano
или в качестве приложения CGI
$ sudo fanocli --deploy-cgi=cgi-fcgi.fano
Пожалуйста, прочитайте развертывание как приложение FastCGI или развернуть в качестве приложения CGI из документации Fano Framework для получения дополнительной информации.
Если у вас нет установки Fano CLI, вам нужно настроить виртуальный хост вручную, как показано в разделе «Запуск» с разделом веб -сервера этого документа.
Откройте интернет-браузер и перейдите на 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 ветви этого репозитория и вытащить последнее обновление из master ветви репозитория FANO.
Копировать *.cfg.sample to *.cfg . Сделайте корректировку, как вам нужно в build.cfg , build.prod.cfg , build.dev.cfg и запустите скрипт оболочки build.sh (если вы находитесь в 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 Script предоставляется для упрощения копирования этих файлов конфигурации. Следующая команда оболочки аналогична команде выше.
$ ./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
Процесс сборки будет использовать конфигурацию компилятора, определенную в vendor/fano/fano.cfg , build.cfg и build.dev.cfg .
Если переменная среды BUILD_TYPE не установлена, будет принята производственная среда.
Компиляция будет выводить исполняемый файл в каталог, определенный в переменной среды EXEC_OUTPUT_DIR . По умолчанию является public каталог.
$ EXEC_OUTPUT_DIR=/path/to/public/dir ./build.sh
Компиляция будет использовать исполняемое имя файла, как определено в переменной среды EXEC_OUTPUT_NAME . По умолчанию app.cgi Filename.
$ EXEC_OUTPUT_NAME=index.cgi ./build.sh
Настроить виртуальный хост. Пожалуйста, проконсультируйтесь с документацией веб -сервера, который вы используете.
Например, на 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
Для развертывания в качестве 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>
и поместите файл .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, который можно использовать для упрощения моделирования приложения Run в оболочке.
$ ./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 для обнаружения утечки памяти (если вы включите переключатель -gh в build.dev.cfg ).
Вам необходимо развернуть только исполняемые бинарные и любые вспомогательные файлы, такие как шаблоны HTML, изображения, таблицы стилей CSS, конфигурация приложения. Любые файлы pas или inc или сценарии оболочки не требуются в машине развертывания для запуска приложения.
Таким образом, для этого репозитория вам нужно будет скопировать public , Templates , config и справочники storages на вашу машину развертывания. Убедитесь, что каталог storages подходит для записи веб -сервера.
При запуске сценария build.sh вы можете встретиться после предупреждения:
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
Это известная проблема между свободным паскалем и гну линкером. См. FAQ: Link.res Syntax Error, или «Вы забыли -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 удалит все файлы в каталоге bin/unit кроме файла README.md .
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
tools/clean.sh предоставляется для упрощения этой задачи.
Бесплатный Pascal поддерживает Windows в качестве целевой операционной системы, однако этот репозиторий еще не протестирован в Windows. Чтобы нацелиться на Windows, в build.cfg замените компилятор -компилятор -Tlinux на -Twin64 и нельзя #-WC , чтобы стать -WC .
Хотя вы можете использовать Lazarus IDE, это не обязательный инструмент. Должно быть достаточно любого текстового редактора для редактирования кода (Atom, Visual Studio Code, Sublime, VIM и т. Д.).