Google App Engine에서 zipimport로 새로운 Django 버전 도입

2720 단어 djangoGoogleextOSGAE
오래전부터 GAE를 등록했는데 연통의 GSM번호만 등록할 수 있는 것 같았는데 다행히 지난번 카드를 잃어버려서 장연통을 했어요.
본론으로 돌아가면 GAE가 자체로 가지고 있는 django는 0.96판이다. 나는 신입생을 쫓는 족인데 1.0이 있는데 왜 안 써?공식 글은 원래django 개발판을 GAE에 어떻게 도입하는지 소개했는데 1.0에도 똑같이 적용된다. 구체적으로django를 자신의 응용 디렉터리에 압축을 풀고main.py에 몇 줄의 코드를 추가하면 0.96을 사용하지 않고 새 버전을 도입합니다. 그러나 그 글은 두 줄의 코드가 축소되지 않아서 문제가 크지 않습니다.그러나 이 방법은 좋지 않다. GAE는 1000개의 파일 수량 제한이 있기 때문에django의 파일이 너무 많고 간소화한 후에 400여 개가 있다. 만약에 나중에 자바스크립트, css 라이브러리를 도입하거나 쓸 프로그램 파일이 많으면 처리하기 어렵다.
원문을 찾을 수 없습니다. 오늘 검색할 때 공식적으로 또 한 편문장.이 나왔습니다. django 압축 패키지를 응용 프로그램 디렉터리에 넣고 zipimport로 GAE에 도입하는 것을 소개합니다.GAE는 또한 단일 파일이 1M을 초과할 수 없도록 제한하기 때문에django를 간소화해야 하며 다음 파일을 삭제하는 것을 추천합니다.
  • django/conf/locale/*(en과zh CN을 보존해야 할 경우)
  • django/contrib/admin(이것은 구글에서 비활성화됨)
  • django/contrib/admindocs
  • django/contrib/gis(이것은 지리정보모듈이 비교적 크다)
  • django/*.pyc (이런 파일은 필요 없음)
  • 압축하면 649KB밖에 안 돼요. 이 압축 가방을 자신의 응용 프로그램 디렉터리에 놓으세요.
    그다음에 메일을 고치는 거예요.활용단어참조
    import logging, os, sys
    
    # Google App Engine imports.
    from google.appengine.ext.webapp import util
    
    # Remove the standard version of Django.
    for k in [k for k in sys.modules if k.startswith('django')]:
      del sys.modules[k]
    
    # Force sys.path to have our own directory first, in case we want to import
    # from it.
    if os.name=='nt':
        os.unlink=lambda :None
    
    # Add Django 1.0 archive to the path.
    django_path = 'django.zip'
    sys.path.insert(0, django_path)
    
    # Must set this env var *before* importing any part of Django
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    
    import django.core.handlers.wsgi
    import django.core.signals
    import django.db
    import django.dispatch.dispatcher
    
    def log_exception(*args, **kwds):
        logging.exception('Exception in request:')
        # Log errors.
        django.dispatch.dispatcher.connect(log_exception, django.core.signals.got_request_exception)
        # Unregister the rollback event handler.
        django.dispatch.dispatcher.disconnect(django.db._rollback_on_exception,django.core.signals.got_request_exception)
    
    def main():
      # Re-add Django 1.0 archive to the path, if needed.
      if django_path not in sys.path:
        sys.path.insert(0, django_path)
    
      # Create a Django application for WSGI.
      application = django.core.handlers.wsgi.WSGIHandler()
    
      # Run the WSGI CGI handler with that application.
      util.run_wsgi_app(application)
    
    if __name__ == '__main__':
      main()
    

    이제 어플을 쓸 수 있어요.
    P.S.: 이미 알고 있는 버그 중 하나입니다. 압축 파일을 사용하면 국제적으로 설정된 언어를 사용할 수 없습니다. 시간이 있으면 Google group에 보고하겠습니다.사실 이 방법은 이전과 똑같다. 단지djangopath가 다를 뿐이야.

    좋은 웹페이지 즐겨찾기