Приложение Flask GAE выдает ошибку

#python #google-app-engine #flask #jinja2

#python #google-app-engine #flask #jinja2

Вопрос:

Я создал приложение flask, которое отлично работает на pythonanywhere, но когда я развернул его в Google App Engine, оно выдало ошибку http://aapkatool.appspot.com /

вот мой код

 from flask import Flask, request, session, redirect,url_for,render_template,flash,abort
import jinja2
import os
jinja_environment = jinja2.Environment(autoescape=True,
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')))

app = Flask(__name__)
app.config["DEBUG"] = True
@app.route('/', methods=['POST', 'GET'])
def emi():
  if request.method == 'POST':

    p =int(request.form['enternumber1'])
    r=float(request.form['enternumber2'])
    R=(r/12)/100
    N =int(request.form['enternumber3'])
    Dp =int(request.form['enternumber4'])
    P=p-Dp
    B=(1 R)**N
    I=(B)/(B-1)

    EMI1 = (P) * (R) * (I)
    EMI="%.2f" %(EMI1)
    TAP1=EMI1*N
    TAP="%.2f" %(TAP1)
    TI=TAP1-P
    TI="%.2f" %(TI)



    return render_template('index.html', EMI=EMI,TAP=TAP,TI=TI,P=P,r=r,N=N,Dp=Dp)
  return render_template('index.html')
  

и вот мой код app.yaml

 application: aapkatool
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /.*
  script: initialize.app

libraries:
- name: jinja2
  version: "2.6"

- name: markupsafe
  version: "latest"
  

и вот initialize.py код

 from google.appengine.ext.webapp.util import run_wsgi_app

from main import app

run_wsgi_app(app)
  

вот полная ошибка

 Traceback (most recent call last):

  File "C:Program FilesGooglegoogle_appenginegoogleappengineruntimewsgi.py", line 267, in Handle

    result = handler(dict(self._environ), self._StartResponse)

  File "C:Python27ageappflaskapp.py", line 1701, in __call__

    return self.wsgi_app(environ, start_response)

  File "C:Python27ageappflaskapp.py", line 1685, in wsgi_app

    with self.request_context(environ):

  File "C:Python27ageappflaskapp.py", line 1646, in request_context

    return RequestContext(self, environ)

  File "C:Python27ageappflaskctx.py", line 186, in __init__

    self.match_request()

  File "C:Python27ageappflaskctx.py", line 204, in match_request

    self.url_adapter.match(return_rule=True)

  File "C:Python27ageappwerkzeugwerkzeugrouting.py", line 1423, in match

    raise NotFound()

NotFound: 404: Not Found

INFO     2016-10-12 15:13:03,801 module.py:788] default: "GET /favicon.ico HTTP/1.1" 500 -
ERROR    2016-10-12 09:43:46,542 wsgi.py:279] 

Traceback (most recent call last):

  File "C:Program FilesGooglegoogle_appenginegoogleappengineruntimewsgi.py", line 267, in Handle

    result = handler(dict(self._environ), self._StartResponse)

  File "C:Python27ageappflaskapp.py", line 1701, in __call__

    return self.wsgi_app(environ, start_response)

  File "C:Python27ageappflaskapp.py", line 1689, in wsgi_app

    response = self.make_response(self.handle_exception(e))

  File "C:Python27ageappflaskapp.py", line 1687, in wsgi_app

    response = self.full_dispatch_request()

  File "C:Python27ageappflaskapp.py", line 1360, in full_dispatch_request

    rv = self.handle_user_exception(e)

  File "C:Python27ageappflaskapp.py", line 1358, in full_dispatch_request

    rv = self.dispatch_request()

  File "C:Python27ageappflaskapp.py", line 1344, in dispatch_request

    return self.view_functions[rule.endpoint](**req.view_args)

  File "C:Python27ageappmain.py", line 13, in age2

    p =int(request.form['enternumber1'])

  File "C:Python27ageappwerkzeugwerkzeuglocal.py", line 336, in __getattr__

    return getattr(self._get_current_object(), name)

  File "C:Python27ageappwerkzeugwerkzeugutils.py", line 77, in __get__

    value = self.func(obj)

  File "C:Python27ageappwerkzeugwerkzeugwrappers.py", line 383, in form

    self._load_form_data()

  File "C:Python27ageappflaskwrappers.py", line 129, in _load_form_data

    RequestBase._load_form_data(self)

  File "C:Python27ageappwerkzeugwerkzeugwrappers.py", line 318, in _load_form_data

    data = parser.parse_from_environ(self.environ)

  File "C:Python27ageappwerkzeugwerkzeugformparser.py", line 164, in parse_from_environ

    return self.parse(stream, mimetype, content_length, options)

  File "C:Python27ageappwerkzeugwerkzeugformparser.py", line 188, in parse

    content_length, options)

  File "C:Python27ageappwerkzeugwerkzeugformparser.py", line 98, in wrapper

    return f(self, stream, *args, **kwargs)

  File "C:Python27ageappwerkzeugwerkzeugformparser.py", line 209, in _parse_urlencoded

    errors=self.errors, cls=self.cls)

  File "C:Python27ageappwerkzeugwerkzeugurls.py", line 278, in url_decode_stream

    include_empty, errors))

  File "C:Python27ageappwerkzeugwerkzeugdatastructures.py", line 330, in __init__

    for key, value in mapping or ():

  File "C:Python27ageappwerkzeugwerkzeugurls.py", line 283, in _url_decode_impl

    for pair in pair_iter:

  File "C:Python27ageappwerkzeugwerkzeugwsgi.py", line 670, in make_chunk_iter

    stream = make_limited_stream(stream, limit)

  File "C:Python27ageappwerkzeugwerkzeugwsgi.py", line 579, in make_limited_stream

    raise TypeError('stream not limited and no limit provided.')

TypeError: stream not limited and no limit provided.

INFO     2016-10-12 15:13:46,665 module.py:788] default: "POST / HTTP/1.1" 500 -

please help me why it is giving error.
  

Спасибо

Комментарии:

1. Кажется, работает, в чем ошибка?

2. пожалуйста, нажмите «рассчитать», тогда появится сообщение об ошибке Ошибка: ошибка сервера Сервер обнаружил ошибку и не смог выполнить ваш запрос. Пожалуйста, повторите попытку через 30 секунд.

3. тот же код работает нормально на kk268.pythonanywhere.com/emi-calc

4. Вы не прокомментировали, работает оно или нет на локальном сервере разработки.

5. оно не работает на локальном сервере разработки

Ответ №1:

calculate Определена ли функция в обоих развертываниях на http://kk268.pythonanywhere.com/emi-calc и http://aapkatool.appspot.com / ? Единственная ошибка, которую я вижу в своем браузере:

 (index):145 Uncaught ReferenceError: calculate is not defined
onclick @ (index):145
  

и я не вижу, где calculate определена функция.

Комментарии:

1. Привет, friendoflore, спасибо за ваш ответ, но в flask нет необходимости определять функцию вычисления

Ответ №2:

Я не уверен, почему у вас вообще есть initialize.py файл. Похоже, вам это не нужно. В google.appengine.ext.webapp документах пакета указано, что оно предназначено для устаревшей среды Python 2.5, и вы по праву используете Python 2.7.

  1. Измените обработчик вашего app.yaml скрипта, чтобы вместо этого указывать на main.app .
  2. Удалить initialize.py .
  3. Повторно разверните или, что еще лучше, протестируйте свой код локально, чтобы вы могли увидеть точный код ошибки без необходимости повторного развертывания. Если это происходит только в развернутой версии, перейдите в область ведения журнала облачной консоли и разверните запрос с ошибкой, чтобы увидеть код ошибки и код проблемы, которые необходимо исправить.

Пример начального проекта с Flask можно найти здесь, на который также есть ссылки в документации по началу работы для App Engine с Python. Кроме того, запустите свой локальный сервер разработки, если вы этого еще не сделали.

Комментарии:

1. Привет, Бреттдж, я удалил initialize.py но все та же ошибка . Я тоже запускаю его в автономном режиме. вот ошибка. «поднять TypeError(‘поток не ограничен, и ограничение не предусмотрено.’) TypeError: поток не ограничен, и ограничение не предусмотрено «.

2. В выходных данных должно быть больше полезной информации, такой как номер строки. Вам необходимо опубликовать полный контекст ошибки.

3. Привет, Бреттдж. Спасибо за ваш ответ. Я опубликовал полное сообщение об ошибке в своем сообщении. пожалуйста, проверьте и дайте мне знать, где я делаю неправильно

4. Я запустил ваше приложение локально без проблем. Я полагаю, что у вас проблема с вашими зависимостями. Где находится Flask? Находится ли оно в вашем каталоге приложений? Попробуйте pip install -t lib / flask, а затем создайте appengine_config.py файл со следующим: из google.appengine.ext import vender и в следующей строке vendor.add(‘lib’).