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」が表示されません。ルート ディレクトリ (app.yaml および helloworld.py と同じディレクトリ) 内に shamn.py が存在することを確認し、3 回確認しました。以前は shaman という名前の静的ディレクトリがあり、クラウドで競合を引き起こしている可能性があると考えたため、名前を shamn.py に変更しました。バージョンを 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 を何度も使用してきましたが、これほど困惑したことはありません。私はすべての重要なコードをハックする必要があり、今ではコードの切り株に戻っています... 2 週間オフラインで作業し、クラウドにプッシュしないことの欠点の 1 つです (これは以前に発見された可能性があります)。

どんな助けでも大歓迎です。

...更新、まあ、それは翌朝であり、私はまだ困惑しています...次に私がしようとしているのは、新しいファイルを作成することです. 私が達成しようとしているのは、簡略化されたxmlhttprequestを使用して、クライアントからサーバーにjsonを投稿することだけです。ページは同じドメインから読み込まれているため、これはクロスドメインの問題ではありません。さらに、リクエストは、少なくとも shamn (Python モジュール) が存在する必要があることを認識するのに十分な距離に達していますが、それを見つけることができません。これはすでに一度名前が変更されているので、「ちょっといじって」解決策を見つける方法を見ていきます。主な問題は、コードを変更しようとするたびに、クラウドに再アップロードする必要があることです。これは、dev で複製できないためです。

4

2 に答える 2

0

AppEngineは本番サーバーで大文字と小文字を区別するため、ファイルの名前がShamn.pyでないことを確認してください。

于 2013-01-27T07:58:12.000 に答える
0

これは古い質問で、答えは wsgi.app がグローバル コンテキストにあるというものでした。つまり、2 つ存在することはできません。shamn.py と helloworld.py (どちらも app と呼ばれる) に 1 つあり、競合が発生しました。helloworld を取り除きました。すべて問題なく動作しました。

于 2013-03-10T19:24:27.020 に答える