2014-07-01 7 views
9

मेरे जीवन के लिए, मैं यह नहीं समझ सकता कि मेरे फ्लास्क ऐप में मेरी त्रुटियां कहां से आ रही हैं, जब मैं इसे बंदूक के माध्यम से चलाता हूं, क्योंकि मैं यह नहीं समझ सकता कि स्टैक ट्रेस कैसे प्रदर्शित किया जाए।फ्लास्क + गनिकॉर्न ऐप में अपवाद कैसे देखें?

उदाहरण के लिए, मान लीजिए कि मेरे पास बहुत सरल है "हैलो, वर्ल्ड!" फ्लास्क में लिखा ऐप।

import logging 
import os 
from flask import Flask 

app = Flask(__name__) 
app.debug = True 

@app.route('/') 
def hello(): 
    raise Exception('Exception raised!') 
    return 'Hello World!' 

if __name__ == '__main__': 
    app.run() 

अगर मैं python hello.py के साथ इस चलाते हैं, तो सब कुछ ठीक है, के रूप में मैं एक बहुत ही उपयोगी स्टैक ट्रेस मिलती है: अगर मैं के साथ एक Procfile बनाने

(venv)142:helloflask $ python hello.py 
* Running on http://127.0.0.1:5000/ 
* Restarting with reloader 
127.0.0.1 - - [30/Jun/2014 18:52:42] "GET/HTTP/1.1" 500 - 
Traceback (most recent call last): 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/grautur/code/helloflask/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/grautur/code/helloflask/hello.py", line 10, in hello 
    raise Exception('Exception raised!') 
Exception: Exception raised! 

हालांकि,

web: gunicorn hello:app 

और फिर foreman start -p 8000 के साथ ऐप शुरू करें, तो मुझे कुछ भी नहीं दिखाई देता है। बस एक "आंतरिक सर्वर त्रुटि" वेबपेज।

$ foreman start -p 8000 
18:56:10 web.1 | started with pid 36850 
(...nothing else is ever displayed...) 

मैं अपने फ्लास्क + गनिकॉर्न ऐप को और अधिक उपयोगी डीबगिंग संदेश दिखाने के लिए कैसे प्राप्त करूं? मैंने app.debug = True (और इसके विभिन्न पुनरावृत्तियों) को सेट करने का प्रयास किया, क्योंकि ऐसा लगता है कि यह अन्य स्टैक ओवरफ्लो पोस्ट सुझाए गए हैं, लेकिन ऐसा कुछ भी नहीं दिख रहा है।

+0

हाय, क्या आपको कोई समाधान मिला है? – DavidLin

+0

गनिकॉर्न डिफ़ॉल्ट रूप से stderr पर लॉगिंग कर रहा है और एकमात्र कारण है जो मैं सोच सकता हूं कि आप जो देखते हैं उसे समझा सकते हैं, अगर गनिकोर्न फ़ाइल में लॉग इन करता है (इस मामले में आपको stderr या stdout पर कुछ भी नहीं मिलता है)। क्या आपने बीटीडब्ल्यू की कोशिश की है? अर्थात। 'वेब के साथ फाइलों पर लॉग इन करने के लिए बंदूक को कॉन्फ़िगर करने के लिए: gunicorn --error-logfile = hello-gunicorn.log --access-logfile = हैलो-गनिकॉर्न-access.log हैलो: ऐप' और देखें कि वहां क्या लॉग हो जाता है? – dimi

उत्तर

5

मैं फोरमैन से परिचित नहीं हूं, इसलिए सुनिश्चित नहीं है कि इसे किसी भी तरह से कॉन्फ़िगर करने की आवश्यकता है, लेकिन Gunicorn के लिए कुछ भी लॉग इन करने के लिए, पहले आपको अपने फ्लास्क ऐप के लिए लॉगिंग सेट अप करने की आवश्यकता है। डिफ़ॉल्ट रूप से

stderr को
import logging 

# Log only in production mode. 
if not app.debug: 
    stream_handler = logging.StreamHandler() 
    stream_handler.setLevel(logging.INFO) 
    app.logger.addHandler(stream_handler) 

StreamHandler लॉग:

आसान तरीका करने के लिए वह ऐसा होगा। अगर आप किसी फ़ाइल में लॉग इन करना चाहते हैं, तो गनिकॉर्न में --access-logfile और --error-logfile विकल्प हैं।

अधिक विस्तृत स्पष्टीकरण और फ्लास्क त्रुटि हैंडलिंग के बारे में कुछ अच्छे विचारों के लिए docs देखें।

+0

पायथन में 'लॉगिंग.फाइलहैंडलर' और 'रोटेटिंगफाइल हैंडलर' और 'टिमडोटिंगफाइलहैंडलर' –

0

मुझे पता चला कि जब गनिकोर्न को अपस्टार्ट स्क्रिप्ट (उबंटू 14.04 एलटीएस) के साथ सक्रिय किया जा रहा था, तो फ्लास्क से त्रुटियां /var/log/upstart/YOUR_UPSTART_SCRIPT.log पर लिखी जा रही थीं।

कोई फर्क नहीं पड़ता कि मैंने और क्या प्रयास किया, उदा। @Audrius Kažukauskas द्वारा समाधान, मैं बस कहीं भी किसी भी त्रुटि या tracebacks नहीं देख सका।

संबंधित मुद्दे