2017-04-25 7 views
1

フラスコでの作業に問題があります。私はPython 3.5.2を実行しているvirutalenv内のDreamHostでFlaskサイトを実行しています。アプリケーションは、URL内のクエリ文字列から入力を受け取り、サーバ側のJSONファイルを解析し、そのクエリ文字列をJSONファイルで検索し、JSONを再フォーマットして、クライアントに送り返す必要があります。代わりに、それは私に500エラーコードを与えます。ここに私のコードです。すべてのログ機能呼び出しを赦してください。私は周りを探索することでできることをやった。ドリームホストで500エラーを返すフラスコのサイトを運行している旅客

import logging 
logging.basicConfig(filename='wsgi_flask.log', level=logging.DEBUG) 
try: 
    import sys, os 

    logging.info('line 7') 

    VENV = os.path.join(os.environ['HOME'], '.pyenv', 'versions', '3.5.2', 'envs', 'flask') 
    INTERP = os.path.join(VENV, 'bin', 'python') 

    logging.info('line 12') 

    if sys.executable != INTERP: 
     os.execl(INTERP, INTERP, *sys.argv) 

    logging.info('line 17') 

    sys.path.append(VENV) 
    sys.path.append(os.path.join(VENV, 'lib', 'python3.5', 'site-packages')) 
    sys.path.append(os.path.join(os.environ['HOME'], 'api.example.com')) 

    logging.info('line 23') 

    # INTERP = os.path.join(os.environ['HOME'], '.pyenv', 'versions', 'flask', 'bin', 'python') 
    # if sys.executable != INTERP: 
    #  os.execl(INTERP, INTERP, *sys.argv) 
    # sys.path.append(os.getcwd()) 
    from paste.exceptions.errormiddleware import ErrorMiddleware 

    logging.info('line 31') 

    # import argparse 
    import json 

    logging.info('line 36') 

    from flask import (Flask, abort, g, jsonify, make_response, redirect, 
        render_template, render_template_string, request, url_for, Response) 

    logging.info('line 41') 

    # parser = argparse.ArgumentParser() 
    # parser.add_argument('-d', '--debug', action='store_true') 
    # apargs = parser.parse_args() 

    # def debugLog(*args): 
    #  if apargs.debug: 
    #   for i in args: 
    #    print(i) 

    application = Flask(__name__) 

    logging.info('line 54') 

    @application.route('/') 
    def index(): 
     logging.info('line 58') 
     # if apargs.debug: 
     #  data = json.load(open('/path/to/test.json', 'rb')) 
     # else: 
     logging.info('line 62') 
     try: 
      logging.info('line 64') 
      data = json.load(open('/path/to/test.json', 'rb')) 
      logging.info('line 66') 
     except: 
      logging.info('line 68') 
      logging.warning('Is it the JSON?') 
      raise('Error whilst loading JSON') 
     logging.info('line 71') 
     getForm = request.args.get('search') or '' 
     logging.info('line 73') 

     # debugLog(data, getForm) 

     jsonData = "" 
     logging.info('line 78') 
     for d in data: 
      logging.info('line 80 (for loop)') 
      # debugLog(d) 
      if getForm in d['text']: 
       logging.info('line 83 (for loop)') 
       jsonData = jsonData + str(d) + ',' 
       logging.info('line 85 (for loop)') 
      logging.info('line 86 (for loop)') 
     logging.info('line 87 (out of loop)') 
     # debugLog(jsonData) 

     jsonData = str(jsonData) 
     logging.info('line 91') 
     jsonData = jsonData[:-1] 
     logging.info('line 93') 
     jsonData = jsonData.replace("'", '"') 
     logging.info('line 95') 
     jsonData = '[' + jsonData + ']' 
     logging.info('line 97') 

     # debugLog('\n', jsonData) 
     return Response(jsonify(json.loads(jsonData)), mimetype='application/json') 
     logging.info('line 101 (this should not show)') 

     @application.errorhandler(500) 
     def error(e): 
      logging.warning(e + '\n\n\n What\'s happening here') 
      return str(e) 
     logging.info('line 107') 
     application = ErrorMiddleware(application, debug=True, error_log='tmp/wsgi_error.log') 
     logging.info('line 109') 

    # if apargs.debug: 
    #  application.run(host='0.0.0.0', debug=True, port=80) 
except: 
    logging.warning('line 114 (beginning of outer most try-except)') 
    import sys, os 
    logging.warning('line 116') 

    from traceback import format_list, extract_tb 
    logging.warning('line 119') 
    (extype, value, trace) = sys.exc_info() 
    logging.warning('line 121') 

    sys.stderr.buffer.write("%s:%s\n%s" % (extype, value,''.join(format_list(extract_tb(trace))))) 
    logging.warning('line 124 (EOF)') 

これは私のディレクトリツリーです:

. 
|-- .python-version 
|-- public 
| |-- .htaccess 
| |-- favicon.gif 
| |-- favicon.ico 
| |-- passenger_wsgi.py 
| `-- quickstart.html 
`-- tmp 
    `-- restart.txt 

そして、これは私の.htaccessです:

:私は助けと参考のために、以下のすべてのガイドを使用している

PassengerPython /home/dh_user/.pyenv/versions/3.5.2/envs/flask/bin/python 

<VirtualHost *:80> 
    # This Flask web app will use Python 3.0 
    ServerName api.example.com 
    DocumentRoot /home/dh_user/api.example.com/public 
</VirtualHost> 

https://help.dreamhost.com/hc/en-us/articles/215769548-Passenger-and-Python-WSGI https://www.phusionpassenger.com/library/walkthroughs/start/python.html https://www.byteconsole.com/get-flask-up-and-running-on-a-dreamhost-server-with-passenger/

編集:Dreamhostでは共有ホストのPassengerログを見ることができません。私はあなたを与えることができる最高のは、すべてのリクエストに応じて、私に

​​

編集2を与え、私のerror.logに、次のとおりです。私はフラスコからエラーを収集するために貼り付けPythonモジュールを使用することだし、それは私にこの与えている:

File '/home/dh_user/.pyenv/versions/3.5.2/envs/flask/lib/python3.5/site-packages/paste/exceptions/errormiddleware.py', line 224 in next 
    return self.app_iterator.next() 
AttributeError: 'ClosingIterator' object has no attribute 'next' 
+1

トレースバックを送信してください。 – stamaimer

答えて

0

まあ、私はそれを修正したようです。私がやっていることは、ペーストを削除し、その後にいくつか行うことです。

関連する問題