这适用于本地开发。但是,当我部署到生产时,我遇到了问题。我收到的错误如下:
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确保一切都干净...等...仍然无法弄清楚为什么会发生这种情况...请注意,在流程的每一步,我都会在推送到云之前验证本地开发环境中的功能。因为这纯粹是一个服务器端问题,我不打算清除客户端上的任何缓存,但我可以从日志中看到请求到达正确的URL(/ api / test,/ api?,/ api) / etc(以及所有其他合理的组合以防万一)。不起作用... arrrggg。我做错了什么?
供参考,这是我非常简单的测试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)
这适用于dev,但不适用于生产。 并且,'index.html'被验证存在(与helloworld.app共享)所以我想我可以排除这一点)。请注意,我已经和GAE一起工作了很多年,而且我从来没有这么难过,而且看起来很简单。我不得不破解我所有的基本代码,现在我又回到了代码的一堆......离线工作两周而不是推向云端的缺点之一(这可能是早先发现的)。
任何帮助将不胜感激。
...更新,嗯,这是第二天早上,我仍然难倒......接下来我要做的就是创建一个新文件。我想要完成的就是使用简化的xmlhttprequest将一些json从客户端发布到服务器。这不应该是跨域问题,因为页面是从同一个域加载的。此外,请求已经足够远,至少认识到shamn(一个python模块)应该存在,但它找不到它。这已经重命名了一次,所以我只是'修补',看看我是如何找到解决方案的。主要问题是每次我尝试更改代码都要求我重新上传到云端,因为我无法在dev中复制。
答案 0 :(得分:0)
检查该文件是否被称为Shamn.py,因为AppEngine在生产服务器上区分大小写。
答案 1 :(得分:0)
这是一个老问题,答案是wsgi.app处于全局上下文中,这意味着不能有两个。我在每个shamn.py和helloworld.py中都有一个(都叫app),导致冲突。摆脱了helloworld,一切正常。