NLTK+TextBlob в flask/nginx/gunicorn при ошибке Ubuntu 500

Я пытаюсь запустить анализ именной фразы в приложении Flask, работающем на Ubuntu, которое обслуживается через gunicorn и nginx. Я получаю сообщение об ошибке 500 без (очевидной) регистрации ошибки в журналах ошибок nginx, супервизора или единорога. Не проливает света и «приложение supervisorctl tail».

Мои сайты-доступный nginx.conf:

server {
    listen 80;
    server_name [domain redacted];
    charset utf-8;
    client_max_body_size 75M;

    access_log /var/log/nginx/nginx_access.log;
    error_log /var/log/nginx/nginx_error.log;

    location / { try_files $uri @app; }

    location @app {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Мой руководитель app.conf

[program:app]
command = gunicorn app:app -b localhost:8000
directory = /home/www/app
user = admin

Я запускаю свое приложение в app.py со следующим (проблема с DEBUG = False и True в config.py)

app = Flask(__name__, static_folder='static', static_url_path='/static')
app.config.from_pyfile('config.py')

if __name__ == '__main__':
        app.run()
        if not app.debug:
            stream_handler = logging.StreamHandler()
            stream_handler.setLevel(logging.INFO)
            app.logger.addHandler(stream_handler)

Config.py просто

DEBUG = False
ALLOWED_HOSTS=['*']

Функция именных словосочетаний Я звоню

from textblob import TextBlob

def generateNounPhrases(input):
    blob = TextBlob(input)
    np = blob.noun_phrases

    return np

Маршрут фляги app.py для страницы, передающий вывод generateNounPhrases()

@app.route('/thread', methods=['GET'])
def thread():
    ...
    nounphrases = generateNounPhrases(text_to_analyze)   
    ...

    return render_template("Thread.html", nounphrases=nounphrases)

Я абсолютно потерян и я абсолютный новичок в этом. Любое руководство было бы огромным!


person user538    schedule 12.11.2014    source источник
comment
Что произойдет, если вы установите DEBUG = True?   -  person dirn    schedule 12.11.2014
comment
Я вижу страницу с внутренней ошибкой сервера, которая немного отличается от стандартной страницы 500, которую я получаю в разделе False. В остальном, ничего другого я не вижу. Я надеялся, что это вызовет экраны ошибок Werkzeug, к которым я привык при локальной разработке, но не так.   -  person user538    schedule 12.11.2014


Ответы (1)


sudo user = admin, объявленный в файле супервизора app.conf, созданном для запуска этого приложения, не смог прочитать на корневом уровне сайта. Недоступные корпуса NLTK, загруженные в /root/nltk_data, вызывали мои исходные 500...

Я обнаружил эту проблему после того, как перенастроил ведение журнала gunicorn и получил фатальные сбои супервизора на supervisorctl restart app для недавно указанного gunicorn.log, не имеющего разрешений на запись.

Моя обновленная и рабочая конфигурация супервизора без объявления пользователя выглядит следующим образом:

[program:app]
command = gunicorn app:app -b localhost:8000 --log-file /var/log/gunicorn/gunicorn_log.log
directory = /home/www/app
stdout_logfile=/var/log/supervisor/supervisor_stdout.log
stderr_logfile=/var/log/supervisor/supervisor_stderr.log

Однако я не уверен, каковы последствия полной безопасности для этой конфигурации, и не уверен, почему пользователь-администратор группы sudo неправильно обращался к каталогам. Бонусные баллы тому, кто ответит на этот вопрос.

person user538    schedule 13.11.2014