Pascal Web Application Framework를 사용한 FastCGI 웹 응용 프로그램 예제. FASTCGI가 지원되지 않으면 CGI 응용 프로그램으로 떨어집니다.
이 프로젝트는 Fano CLI 명령 줄 도구를 사용하여 생성되어 Fano 프레임 워크를 사용하여 웹 응용 프로그램을 스캐 폴딩하는 데 도움이됩니다.
$ 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
자세한 내용은 FASTCGI 응용 프로그램으로 배포하거나 Fano 프레임 워크 문서에서 CGI 응용 프로그램으로 배포하십시오.
Fano CLI가 설치되지 않은 경우이 문서의 웹 서버 섹션과 함께 실행 된 대로 가상 호스트를 수동으로 설정해야합니다.
인터넷 브라우저를 열고 url http : //cgi-fcgi.fano로 이동하십시오.
무료 파스칼이 설치되어 있는지 확인하십시오. 달리다
$ 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를 최신 커밋으로 업데이트하려면 Run을 실행하십시오
$ git checkout master && git submodule foreach --recursive git pull origin master
위 명령은이 저장소의 master 브랜치로 확인하고 Fano 저장소의 master 브랜치에서 최신 업데이트를 가져옵니다.
*.cfg.sample *.cfg 로 복사하십시오. build.cfg , build.prod.cfg , build.dev.cfg 및 run build.sh shell 스크립트 (Windows에있는 경우 build.cmd )에서 필요한대로 조정하십시오.
이 *.cfg 파일에는 실행 파스 가능 Pascal Compiler 스위치가 포함되어있어 실행 파일이 컴파일되고 생성되는 방식을 변경할 수 있습니다. 사용 가능한 컴파일러 스위치에 대한 자세한 설명은 무료 Pascal 문서를 참조하십시오.
또한 src/config/config.json.sample src/config/config.json 에 복사하고 필요에 따라 구성을 편집하십시오. 예를 들어, JavaScript 또는 CSS 스타일 시트가 URL을 수정하기 위해 자신의 기본 URL과 일치하도록 baseUrl 변경해야 할 수도 있습니다.
$ 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
빌드 프로세스는 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에서는 mod_cgi 또는 mod_cgid 와 같은 CGI 모듈을 활성화해야합니다. CGI 모듈이로드되지 않으면 위의 가상 호스트로 인해 app.cgi 실행되지 않고 다운로드됩니다.
예를 들어, 데비안에서는 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 디렉토리가 웹 서버에서 쓸 수 있는지 확인하십시오.
build.sh 스크립트를 실행할 때 경고에 따라 발생할 수 있습니다.
/usr/bin/ld: warning: public/link.res contains output sections; did you forget -T?
이것은 자유 파스칼과 GNU 링커 사이에 알려진 문제입니다. FAQ : Link.res 구문 오류 또는 "잊어 버렸습니까?"
그러나이 경고는 경미하며 무시할 수 있습니다. 출력 실행 파일에는 영향을 미치지 않습니다.
예를 들어, 유닛 소스 코드 (.pas)를 삭제했지만 오래된 생성 장치 (.ppu, .o, .a 파일)가 여전히 있거나 GIT 분기 사이를 전환 할 때 언젠가는 코드를 컴파일 할 수 없습니다. 해결책은 해당 파일을 제거하는 것입니다.
기본적으로 생성 된 컴파일 된 단위는 bin/unit 디렉토리에 있습니다. 그러나 git에 의해 무시되지 않으므로이 디렉토리 내부에서 README.md 파일을 삭제하지 마십시오.
$ rm bin/unit/*.ppu
$ rm bin/unit/*.o
$ rm bin/unit/*.rsj
$ rm bin/unit/*.a
다음에 Shell Command를 사용하면 README.md 파일을 제외한 bin/unit Directory 내부의 모든 파일을 제거합니다.
$ find bin/unit ! -name 'README.md' -type f -exec rm -f {} +
이 작업을 단순화하기 위해 tools/clean.sh 스크립트가 제공됩니다.
Free Pascal은 Windows를 대상 운영 체제로 지원하지만이 저장소는 아직 Windows에서 테스트되지 않았습니다. build.cfg 의 Windows를 대상으로하려면 컴파일러 스위치 -Tlinux -Twin64 및 무인 라인 #-WC 로 대체하여 -WC 가됩니다.
나사로 IDE를 사용할 수는 있지만 필수 도구는 아닙니다. 코드 편집의 텍스트 편집기 (Atom, Visual Studio Code, Sublime, VIM 등)로 충분해야합니다.