3

しばらく App Engine を使用していなかったので、App Engine を再開しようとしています。64 ビットの Linux Go ランタイム、バージョン 1.8.1 を使用しています。

ドキュメントの手順を正しく実行していると思います。また、過去に正しく機能していたことを実行していると思いますが、起動しようとすると次のエラーが発生しますdev_appserver.py

$ dev_appserver.py .
INFO 2013-07-11 07:24:45,919 sdk_update_checker.py:244] SDK の更新を確認しています。
INFO 2013-07-11 07:24:46,230 sdk_update_checker.py:288] この SDK リリースは、宣伝されているリリースよりも新しいものです。
警告 2013-07-11 07:24:46,443 simple_search_stub.py:955] /tmp/appengine.batterybotinfo.darshan/search_indexes から検索インデックスを読み取れませんでした
トレースバック (最新の呼び出しが最後):
  ファイル「/home/darshan/bin/dev_appserver.py」の 182 行目
    _run_file(__file__, グローバル())
  ファイル「/home/darshan/bin/dev_appserver.py」、178 行目、_run_file 内
    execfile(script_path, globals_)
  ファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/devappserver2.py」の 695 行目
    主要()
  メインのファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/devappserver2.py」の 688 行目
    dev_server.start(オプション)
  ファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/devappserver2.py」の 659 行目、先頭
    apis.start()
  ファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/api_server.py」の 137 行目、先頭
    super(APIServer, self).start()
  ファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py」の 295 行目、先頭
    self._start_all_dynamic_port(host_ports) の場合:
  ファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py」、348 行目、_start_all_dynamic_port 内
    サーバー.start()
  ファイル「/home/darshan/software/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py」の 194 行目、先頭
    socket.SOCK_STREAM, 0, socket.AI_PASSIVE)
TypeError: getaddrinfo() 引数 1 は文字列または None でなければなりません

私が最初に考えたのは、間違ったバージョンの Python を使用している可能性があるということでした。案の定、私は 2.7.5 を使用しており、ドキュメントには 2.5 が必要であると明確に記載されています。ただし、2.5 をインストールしてシステムで使用するように設定した後、次のエラーが発生したため、ドキュメントは古くなっているようです。

エラー: Python 2.5 はサポートされていません。バージョン 2.7 を使用してください。

さて、2.7.5 と最初のエラーに戻ります。

これが Python コードのバグなのかdev_appserver.py(1 か月前に公開されているので、そうではないと推測しています)、Python のインストールの問題なのか、それとも私のシステムがグーグルの期待。

必要な場合を除き、コードをいじりたくはありませんdev_appserver.pyが、問題の原因を突き止めるために喜んでコードを調べます。エラーは 194 行目にあります。ここに190-195行目があります:

# AF_INET or AF_INET6 socket
# Get the correct address family for our host (allows IPv6 addresses)
host, port = self.bind_addr
try:
  info = socket.getaddrinfo(host, port, socket.AF_UNSPEC,
                            socket.SOCK_STREAM, 0, socket.AI_PASSIVE)

包含メソッドが 2 回呼び出されていることがわかりました。初回はhostいつもです。2 回目はクラッシュします。は常に(文字列ではなく int)、一見ランダムな 5 桁の int です。"127.0.0.1"port0host10port

と を または のいずれかにハードコーディングしようとしましhostたが"127.0.0.1"、別のエラーが発生します。頭がいっぱいで、よくわからないことを変更しても、本当の問題を解決できないのではないかと思います。エラーメッセージをグーグルで検索しても役に立ちませんでした。port80800

4

2 に答える 2

9

しつこいグーグルは、最終的に報われました。この質問には非常に異なる (そしてより有益な) エラー メッセージが表示されますが、解決策は同じであることが判明しまし/etc/hostslocalhost

特に、私のシステムには次の両方の行が含まれていました。

127.0.0.1  localhost
::1        localhost

2番目をコメントアウトして(そして理由を文書化するためにコメントを追加して)私の問題を解決しました:

127.0.0.1  localhost

# Having multiple localhost entries causes App Enginge dev_appserver.py to fail.
#  IPv6 not currently needed, and the dev server IS needed, so commenting out.
#::1        localhost

dev_appserver.py正常に起動して動作するようになりました。

于 2013-07-11T09:25:33.093 に答える