[PYTHON] 1 & 1 공유 호스팅에 플라스크 애플리케이션 배포 (CGI 사용)
PYTHON1 & 1 공유 호스팅에 플라스크 애플리케이션 배포 (CGI 사용)
플라스크 웹 프레임 워크를 사용하여 스포츠 클럽 용 웹 응용 프로그램을 작성했습니다. 빌드 테스트 (build-in) 테스트 서버를 사용하여 로컬 컴퓨터에서 모든 작업을 수행했습니다.
그들은 1 & 1 공유 호스팅 웹 공간에 배포하도록 지시했는지 알고 있습니다. 그들은 파이썬 지원을 가지고 있지만 CGI가 파이썬 스크립트 만 실행할 수있는 것처럼 보입니다.
나는이 튜토리얼을 시도했다 : CGI를 통한 플라스크
지금까지 재 작성 내용을 무시했습니다. CGI 스크립트에 대한 모든 요청으로 인해 404 오류가 발생했습니다. request.path를 반환하도록 응용 프로그램에서 404 처리기를 수정했습니다. /foo/runserver.cgi/을 요청하면 /가 출력으로 반환됩니다. 왜 그것이 인덱스보기를 제공하지 않는지 나는 모른다. 어떤보기와도 작동하지 않으며, 나는 항상 404를 얻습니다.
친절하고, 세바스찬
해결법
-
==============================
1.나는 주어진 답이 불완전하고 / $ 1을 버리기위한 제안이 잘못 되었기 때문에 거의 1 년 후에 답을 제공하고자합니다. "cgi에서 deploy flask"문자열을 사용하여 인터넷 검색에서 도달 할 수있는 다른 stackoverflow 스레드도 만족스러운 솔루션없이 종료되었습니다.
나는 주어진 답이 불완전하고 / $ 1을 버리기위한 제안이 잘못 되었기 때문에 거의 1 년 후에 답을 제공하고자합니다. "cgi에서 deploy flask"문자열을 사용하여 인터넷 검색에서 도달 할 수있는 다른 stackoverflow 스레드도 만족스러운 솔루션없이 종료되었습니다.
먼저 .htaccess 파일은 .htaccess에서 주석이 전체 행을 차지해야하기 때문에 RewriteCond에 대한 두 번째 행의 주석을 제거해야한다는 점을 제외하고는 참조 된 "CGI를 통한 플라스크"문서와 정확히 같습니다.
.htaccess 파일을 public_html 문서 루트 폴더에 넣고 cgi 스크립트는 /home/myusername/public_html/scgi-bin/moc/cgiappserver-prod.cgi입니다.
물론 파이썬이고 꼭대기에있는 이방인이 더 옳다. 내 ISP에서 그들은 "scgi"라고 부르는 CGI 래퍼를 가진 cpanel을 사용합니다. 불행히도 그것은 진짜가 아닙니다. 따라서 Flask를 실행하기 위해 일반 CGI로 취급하십시오.
나는 공유 호스팅 계정 만 있다고 덧붙여 야합니다.
다음은 내 cgiappserver-prod.cgi 파일입니다.
#!/home/myusername/local/bin/python import cgitb; cgitb.enable() # This line enables CGI error reporting from wsgiref.handlers import CGIHandler import traceback from settings import LGGR app = None try: import moc app = moc.app except Exception, e: LGGR.info( traceback.format_exc([10]) ) LGGR.info( 'Problem in cgiappserver-prod with moc import: %s' % e ) class ScriptNameStripper(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ['SCRIPT_NAME'] = '' return self.app(environ, start_response) app = ScriptNameStripper(app) try: CGIHandler().run(app) except Exception, e: LGGR.info( traceback.format_exc([10]) ) LGGR.info( 'Problem in cgiappserver-prod with CGIHandler().run(): %s' % e )
그래서 내 app은 몇 파일에 퍼져있다. 특히 set.py와 moc.py는 위의 코드에서 보여진다.
창업의 시간은 제가 읽은이 주제에 대한 도움이되지 않는 게시물 덕분이었습니다.하지만 주로 오류 메시지를 일찌감치 꺼내는 일을하지 못해서였습니다. (ISP에서 제공하는 오류 로그에 액세스 할 수 있지만 거의 도움이되지 않습니다.)
먼저 cgitb.enable () 함수가 작동하는지 확인했습니다. 고의적으로 wsgiref의 철자를 틀 었으며 아름다운 오류 페이지를 보았고 cgitb (cgi traceback) 행을 주석 처리하여 오류 메시지가 쓸모없는 500 상태 코드로 바뀌는 것을 보았습니다.
나 또한 settings.py에서 로거, 회전 파일 로거 LGGR을 설정한다는 점에 유의하십시오. 그걸로 나는 여기에 표시되지 않은 뭔가를 추가로해야한다는 것을 발견했습니다. 파이썬 인터프리터에게 sqlite3 라이브러리가 어디에 있는지 알려주는 것입니다.
또한 단순히 CGI에서 언급 된 Flask 문서가 말한 print 문을 사용할 수 있습니다.
사실이지만 HTTP 응답에 대한 인쇄물 쓰기를 디버깅하는 동안 도움이됩니다.
마침내 브라우저의 위치 상자에 슬픈 듯이 www.mysite.com/scgi-bin/moc/cgiappserver-prod.cgi/contact가있는 반면, 실제로는 간단히 www.mysite.com이 필요했습니다. /접촉.
치료법은 cgiappserver-prod.cgi의 ScriptNameStripper 클래스입니다. 다른 플라스크 워드 프로세서에서 가져 왔어.
-
==============================
2.해결책을 찾았습니다! CGI의 환경 변수가 WSGI 응용 프로그램에서 약간 다른 이름을 갖기 때문에 나는 $ .htaccess에서 / $ 1을 (를) 멀리두고 변경된 werkzeug를 약간 수정했습니다. 나는 그것에 대해 werkzeug 개발자에게 알려주고 아마도 그는 내 솔루션을 werkzeug에 포함시킬 것이다.
해결책을 찾았습니다! CGI의 환경 변수가 WSGI 응용 프로그램에서 약간 다른 이름을 갖기 때문에 나는 $ .htaccess에서 / $ 1을 (를) 멀리두고 변경된 werkzeug를 약간 수정했습니다. 나는 그것에 대해 werkzeug 개발자에게 알려주고 아마도 그는 내 솔루션을 werkzeug에 포함시킬 것이다.
-
==============================
3.나는 내가 한 일을 보여 주려고 노력할 것이고, 호스트 계정을 공유하는 Godaddy에서 일하고있다.
나는 내가 한 일을 보여 주려고 노력할 것이고, 호스트 계정을 공유하는 Godaddy에서 일하고있다.
MYSITE 폴더의 cgi-bin 폴더에 다음 cgi 파일을 추가했습니다.
#!/home/USERNAME/.local/bin/python3 from wsgiref.handlers import CGIHandler from sys import path path.insert(0, '/home/USERNAME/public_html/MYSITE/') from __init__ import app class ProxyFix(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ['SERVER_NAME'] = "" environ['SERVER_PORT'] = "80" environ['REQUEST_METHOD'] = "GET" environ['SCRIPT_NAME'] = "" environ['PATH_INFO'] = "/" environ['QUERY_STRING'] = "" environ['SERVER_PROTOCOL'] = "HTTP/1.1" return self.app(environ, start_response) if __name__ == '__main__': app.wsgi_app = ProxyFix(app.wsgi_app) CGIHandler().run(app)
MYSITE 폴더의 init 파일에는 플라스크 앱이 있습니다.
가장 중요한 것은 권한을 올바르게 설정하는 것입니다. 755를 "/home/USERNAME/.local/bin/python3"폴더와 같이이 폴더 권한으로 설정했습니다 !! 플라스크 및 모든 파이썬 패키지를 열려면이 권한이 필요하다는 것을 기억하십시오.
디버깅을 위해 ssh 터미널을 통해 사이트를 방문하고 CGI 만 실행하는 것이 좋습니다. 작동하지만 웹에서 그렇지 않으면 아마도 더 많은 사용 권한을 부여해야하거나 .htaccess 파일을 잘못 작성한 것일 수 있습니다.
CGI를 열려면 MYSITE 폴더에 다음 .htaccess 파일이 있어야합니다.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /home/USERNAME/public_html/MYSITE/cgi-bin/application.cgi/$1 [L]
누군가가 귀하의 페이지를 입력하면 cgi 파일을 렌더링합니다.
from https://stackoverflow.com/questions/18259435/deploy-flask-application-on-11-shared-hosting-with-cgi by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 어떻게 파이썬에서 @debuggable 데코레이터를 작성하겠습니까? (0) | 2018.11.03 |
---|---|
[PYTHON] Windows에서 활성 Chrome 탭의 URL을 얻으려면 어떻게해야합니까? (0) | 2018.11.03 |
[PYTHON] 장고 - 다른 DB와 Auth (0) | 2018.11.03 |
[PYTHON] 파이썬에서 EOF까지 반복하는 법? (0) | 2018.11.03 |
[PYTHON] 파이썬의 기계화 프록시 지원 (0) | 2018.11.03 |