【问题标题】:Flask GAE app giving errorFlask GAE 应用程序出现错误
【发布时间】:2017-02-18 17:13:13
【问题描述】:

我创建了一个在 pythonanywhere 上运行良好的烧瓶应用程序,但是当我将它部署到谷歌应用程序引擎上时,它给出了错误 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 Files\Google\google_appengine\google\appengine\runtime\wsgi.py", line 267, in Handle

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

  File "C:\Python27\ageapp\flask\app.py", line 1701, in __call__

    return self.wsgi_app(environ, start_response)

  File "C:\Python27\ageapp\flask\app.py", line 1685, in wsgi_app

    with self.request_context(environ):

  File "C:\Python27\ageapp\flask\app.py", line 1646, in request_context

    return RequestContext(self, environ)

  File "C:\Python27\ageapp\flask\ctx.py", line 186, in __init__

    self.match_request()

  File "C:\Python27\ageapp\flask\ctx.py", line 204, in match_request

    self.url_adapter.match(return_rule=True)

  File "C:\Python27\ageapp\werkzeug\werkzeug\routing.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 Files\Google\google_appengine\google\appengine\runtime\wsgi.py", line 267, in Handle

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

  File "C:\Python27\ageapp\flask\app.py", line 1701, in __call__

    return self.wsgi_app(environ, start_response)

  File "C:\Python27\ageapp\flask\app.py", line 1689, in wsgi_app

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

  File "C:\Python27\ageapp\flask\app.py", line 1687, in wsgi_app

    response = self.full_dispatch_request()

  File "C:\Python27\ageapp\flask\app.py", line 1360, in full_dispatch_request

    rv = self.handle_user_exception(e)

  File "C:\Python27\ageapp\flask\app.py", line 1358, in full_dispatch_request

    rv = self.dispatch_request()

  File "C:\Python27\ageapp\flask\app.py", line 1344, in dispatch_request

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

  File "C:\Python27\ageapp\main.py", line 13, in age2

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

  File "C:\Python27\ageapp\werkzeug\werkzeug\local.py", line 336, in __getattr__

    return getattr(self._get_current_object(), name)

  File "C:\Python27\ageapp\werkzeug\werkzeug\utils.py", line 77, in __get__

    value = self.func(obj)

  File "C:\Python27\ageapp\werkzeug\werkzeug\wrappers.py", line 383, in form

    self._load_form_data()

  File "C:\Python27\ageapp\flask\wrappers.py", line 129, in _load_form_data

    RequestBase._load_form_data(self)

  File "C:\Python27\ageapp\werkzeug\werkzeug\wrappers.py", line 318, in _load_form_data

    data = parser.parse_from_environ(self.environ)

  File "C:\Python27\ageapp\werkzeug\werkzeug\formparser.py", line 164, in parse_from_environ

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

  File "C:\Python27\ageapp\werkzeug\werkzeug\formparser.py", line 188, in parse

    content_length, options)

  File "C:\Python27\ageapp\werkzeug\werkzeug\formparser.py", line 98, in wrapper

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

  File "C:\Python27\ageapp\werkzeug\werkzeug\formparser.py", line 209, in _parse_urlencoded

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

  File "C:\Python27\ageapp\werkzeug\werkzeug\urls.py", line 278, in url_decode_stream

    include_empty, errors))

  File "C:\Python27\ageapp\werkzeug\werkzeug\datastructures.py", line 330, in __init__

    for key, value in mapping or ():

  File "C:\Python27\ageapp\werkzeug\werkzeug\urls.py", line 283, in _url_decode_impl

    for pair in pair_iter:

  File "C:\Python27\ageapp\werkzeug\werkzeug\wsgi.py", line 670, in make_chunk_iter

    stream = make_limited_stream(stream, limit)

  File "C:\Python27\ageapp\werkzeug\werkzeug\wsgi.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.

谢谢

【问题讨论】:

  • 似乎工作正常,错误是什么?
  • 请点击计算然后它会显示错误错误:服务器错误服务器遇到错误,无法完成您的请求。请在 30 秒后重试。
  • 相同的代码在kk268.pythonanywhere.com/emi-calc上运行良好
  • 您还没有评论它是否在本地开发服务器中工作。
  • 它在本地开发服务器中不起作用

标签: python google-app-engine flask jinja2


【解决方案1】:

我不知道你为什么还有initialize.py 文件。看起来你不需要它。 google.appengine.ext.webapp 包文档声明它适用于已弃用的 Python 2.5 环境,您使用 Python 2.7 是正确的。

  1. app.yaml 的脚本处理程序更改为指向main.app
  2. 删除initialize.py
  3. 重新部署或更好的是,在本地测试您的代码,这样您就可以看到确切的错误代码,而无需重新部署。如果仅在已部署版本上出现,请进入 logging area of the Cloud Console 并展开失败请求以查看错误代码和您需要修复的问题代码。

可以在here 找到带有 Flask 的示例启动项目,Getting Started docs for App Engine with Python 中也引用了该项目。另外,如果您还没有,请获取您的local development server running

【讨论】:

  • 嗨 BrettJ,我删除了 initialize.py 但仍然是同样的错误。我也离线运行它。这是错误。" raise TypeError('stream not limited and no limit provided.') TypeError: stream没有限制,也没有提供限制。"
  • 输出中应该有更多有用的信息,例如行号。您需要发布错误的完整上下文。
  • 嗨 BrettJ。感谢您的回复。我已经在我的帖子上发布了完整的错误消息。请检查并让我知道我做错了什么
  • 我在本地运行您的应用程序没有问题。我相信您的依赖项有问题。烧瓶在哪里?它在您的应用程序目录中吗?尝试 pip install -t lib/flask 然后使用以下内容创建 appengine_config.py 文件:from google.appengine.ext import vender 和下一行 vendor.add('lib')。
【解决方案2】:

calculate 函数是否在 http://kk268.pythonanywhere.com/emi-calchttp://aapkatool.appspot.com/ 的两个部署中定义?我在浏览器中看到的唯一错误是:

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

我没有看到 calculate 函数的定义位置。

【讨论】:

  • 您好,friendoflore,感谢您的回答,但在烧瓶中无需定义计算函数
猜你喜欢
  • 2020-01-03
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2015-09-18
相关资源
最近更新 更多