2

这适用于本地开发。但是,当我部署到生产环境时,我遇到了问题。我收到的错误如下:

Traceback (most recent call last):
File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", 
line 196, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", 
line 255, in _LoadHandler
handler = __import__(path[0]) ImportError: No module named shamn

这是我的 app.yaml 文件供参考:

application: shaman-labz
version: 1-4
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /css
  static_dir: css

- url: /s
  static_dir: s

- url: /api.*
  script: shamn.app

- url: /.*
  script: helloworld.app

libraries:
- name: jinja2
  version: latest

我已经尝试了我能想到的一切来仔细检查任何潜在的命名冲突。helloworld.app 适用于本地和云,但 /api.* 显然正确映射到 shamn.app,但由于某种原因没有看到“shamn”。我已经检查并三次检查了根目录中是否存在 shamn.py(与 app.yaml 和 helloworld.py 相同的目录)。我重命名为 shamn.py,因为之前我有一个名为 shaman 的静态目录,我认为它可能会导致云中的冲突。我什至尝试从 1.3 --> 1.4 更改版本以确保一切都是干净的......等等......仍然无法弄清楚为什么会发生这种情况......请注意,在该过程的每个步骤中,我都验证了推送到云端之前的本地开发环境。因为这纯粹是服务器端问题,

作为参考,这是我非常简单的测试 shamn.py(我将再次尝试并重命名)[更新-只是为了删除任何未知数,我从等式中删除了 json...

import jinja2
import os
#import json

jinja_environment = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))


import webapp2


class MainPage(webapp2.RequestHandler):
    def get(self):

        template_values = {
            'greetings': [],
            'url': 'url',  
            'url_linktext': 'url_linktext'
        }
        template = jinja_environment.get_template('index.html')
        self.response.out.write(template.render(template_values))

class testclass(webapp2.RequestHandler):
    def get(self):
        self.response.out.write('hello world from testclass.get')
    def post(self):
        #jsonobj = json.loads(self.request.body)
        #self.response.out.write(json.dumps(jsonobj))
        self.response.out.write(self.request.body)

app = webapp2.WSGIApplication([
        ('/api/test.*', testclass),
        ('/api.*', MainPage)                            
  ],debug=True)

这适用于开发,但不适用于生产。是的,'index.html' 被验证存在(与 helloworld.app 共享),所以我想我可以排除)。请注意,我断断续续地与 GAE 合作了很多年,我从来没有这么难过,而且在一些看似如此简单的事情上。我不得不破解我所有的基本代码,现在我又回到了一堆代码……离线工作两周而不推送到云端的缺点之一(这可能更早被发现)。

任何帮助将不胜感激。

...更新,这是第二天早上,我仍然很难过...接下来我要做的就是创建一个新文件。我想要完成的只是使用简化的 xmlhttprequest 将一些 json 从客户端发布到服务器。这不应该是跨域问题,因为页面是从同一个域加载的。此外,该请求已经足够远,至少可以识别应该存在 shamn(一个 python 模块)但它找不到它。这已经重命名过一次,所以我将只是“修补”,看看我如何找到解决方案。主要问题是每次我尝试更改代码时都需要重新上传到云端,因为我无法在开发中复制。

4

2 回答 2

0

检查文件是否名为 Shamn.py,因为 AppEngine 在生产服务器上区分大小写。

于 2013-01-27T07:58:12.000 回答
0

this is an old question, and the answer was that the wsgi.app is in global context, meaning that there cannot be two. i had one in each shamn.py and helloworld.py (both called app), causing a conflict. got rid of helloworld, everything worked just fine.

于 2013-03-10T19:24:27.020 回答