0

我之前尝试过通过更改来更新我的应用程序

运行时:python27,线程安全:true,脚本:main.app"

它确实有效并且在 python 2.7 上运行,但我猜它没有正常运行,因为当我访问 URL http://dhsenviro.appspot.com时我的 index.html 没有显示。它现在在 2.5 上运行(因为我想保持它)。robots.txt 为空。如何将其更新到 2.7 还是应该将其更新到 3.x?

应用程序.yaml:

application: dhsenviro
version: 1
runtime: python
api_version: 1

handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css|psd|swf))
  static_files: \1
  upload: (.*\.(gif|png|jpg|ico|js|css|psd|swf))

- url: /robots.txt
  static_files: robots.txt
  upload: robots.txt 

- url: /.*
  script: main.py

主.py:

import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template

class MainHandler(webapp.RequestHandler):
  def get (self, q):
    if q is None:
      q = 'index.html'

    path = os.path.join (os.path.dirname (__file__), q)
    self.response.headers ['Content-Type'] = 'text/html'
    self.response.out.write (template.render (path, {}))

def main ():
  application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True)
  util.run_wsgi_app (application)

if __name__ == '__main__':
  main ()

我不想上传我的 index.html,但我确信它工作正常。

编辑:

主.py:

import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template

class MainHandler(webapp.RequestHandler):
  def get (self, q):
    if q is None:
      q = 'index.html'

    path = os.path.join (os.path.dirname (__file__), q)
    self.response.headers ['Content-Type'] = 'text/html'
    self.response.out.write (template.render (path, {}))

class application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True)

def main ():

if __name__ == '__main__':
  main ()

正确的 APP.YAML :

application: dhsenviro
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css|psd|swf))
  static_files: \1
  upload: (.*\.(gif|png|jpg|ico|js|css|psd|swf))

- url: /robots.txt
  static_files: robots.txt
  upload: robots.txt 
  • 网址:/.* 脚本:main.application

正确的 MAIN.PY

import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template

class MainHandler(webapp.RequestHandler):
  def get (self, q):
    if q is None:
      q = 'index.html'

    path = os.path.join (os.path.dirname (__file__), q)
    self.response.headers ['Content-Type'] = 'text/html'
    self.response.out.write (template.render (path, {}))

application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True)
4

2 回答 2

0

Appengine 不支持 3x(还没有?)。你遇到的错误是什么?如果它是错误的,应该在日志中打印一些东西。一对夫妇认为我注意到,

  • 我认为您不再需要 run_wsgi_app
  • yaml 中的脚本应该是“main.application”而不是“main.py”。将应用程序变量作为全局变量而不是局部变量
于 2013-10-29T01:59:29.850 回答
0

根据 Google 的官方Migrating to Python 2.7文档,我认为您至少必须做两件事

  • 更新您的app.yaml.

在 GAE Python 2.5 中,url 处理程序的 script 属性是 python 源文件的路径。

- url: /.*
  script: main.py

在 Python 2.7 中,它被更改为 a 对象

- url: /.*
  script: myapp.app

应用程序是webapp2.WSGIApplication

  • 将您的应用程序更新到 webapp2
import webapp2

class MainPage(webapp2.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, WebApp World!')

app = webapp2.WSGIApplication([('/', MainPage)])

""" Old code:
def main():
  run_wsgi_app(app)

if __name__ == '__main__':
  main()
"""

尽管您希望保持模板不变,但不推荐使用 webapp 模板。

webapp 模板现已弃用。取而代之的是,您可以使用 Jinja2、Django 或您选择的模板系统(只要它是用纯 Python 编写的)。

于 2013-10-29T02:32:48.300 回答