32045


初歩的な質問となります。

<https://cloud.google.com/appengine/docs/go/quickstart>  
にそって、AppEngineSDKを使ってhelloworldをデプロイしようとしているのですが

goapp deploy -application [YOUR_PROJECT_ID] -version [YOUR_VERSION_ID] .  
を実行すると下記のエラーが表示されてしまいます。

[code]

    03:55 PM Application: swift-network-123456789 (was: None); version: go1 (was: None)
    03:55 PM Host: appengine.google.com
    Traceback (most recent call last):
      File "C:\go_appengine\appcfg.py", line 133, in 
        run_file(__file__, globals())
      File "C:\go_appengine\appcfg.py", line 129, in run_file
        execfile(_PATHS.script_file(script_name), globals_)
      File "C:\go_appengine\google\appengine\tools\appcfg.py", line 5510, in 
        main(sys.argv)
      File "C:\go_appengine\google\appengine\tools\appcfg.py", line 5501, in main
        result = AppCfgApp(argv).Run()
      File "C:\go_appengine\google\appengine\tools\appcfg.py", line 2975, in Run
        self.action(self)
      File "C:\go_appengine\google\appengine\tools\appcfg.py", line 5157, in __call__
        return method()
      File "C:\go_appengine\google\appengine\tools\appcfg.py", line 3889, in Update
        self._UpdateWithParsedAppYaml(appyaml, self.basepath)
      File "C:\go_appengine\google\appengine\tools\appcfg.py", line 3910, in _UpdateWithParsedAppYaml
        updatecheck.CheckForUpdates()
      File "C:\go_appengine\google\appengine\tools\sdk_update_checker.py", line 245, in CheckForUpdates
        runtime=runtime))
      File "C:\go_appengine\google\appengine\tools\appengine_rpc_httplib2.py", line 246, in Send
        url, method=method, body=payload, headers=headers)
      File "C:\go_appengine\lib\httplib2\httplib2\__init__.py", line 1584, in request
        (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
      File "C:\go_appengine\lib\httplib2\httplib2\__init__.py", line 1332, in _request
        (response, content) = self._conn_request(conn, request_uri, method, body, headers)
      File "C:\go_appengine\lib\httplib2\httplib2\__init__.py", line 1274, in _conn_request
        raise ServerNotFoundError("Unable to find the server at %s" % conn.host)
    httplib2.ServerNotFoundError: Unable to find the server at appengine.google.com
    error while running appcfg.py: exit status 1
    
[/code]

当方は認証付きproxy環境であり、proxy設定が読み込めていないのではないかと考えておりますが、  
goappへproxy設定を読み込ませるにはどのようにしたらよろしいでしょうか。  
・GCP上でAppEngineのプロジェクトは作成済みで、GCP上でのサンプルコードのビルドは成功しております  
・ローカルPCはwindows7
32bit環境で環境変数http_proxy/https_proxyにhttp://user:password@addr:portはセット済となります。  
・gcloud initは成功しているのでこちらのコマンドはproxy設定が反映されていると思います。

その他不足情報ありましたら、ご指摘お願いします。

* * *

追記：

<https://code.google.com/p/googleappengine/issues/detail?id=9533>  
のエントリを参考に

[code]

    ./lib/httplib2/httplib2/__init__.py
             def __init__(self, proxy_type, proxy_host, proxy_port,
        -                 proxy_rdns=None, proxy_user=None, proxy_pass=None):
        +                 proxy_rdns=True, proxy_user=None, proxy_pass=None):
    
[/code]

と修正したら、一応成功しました。  
ただ、scriptを編集してしまっており、正攻法ではない気がします。  
コマンドのオプションや設定等の修正方法ありましたらご教示お願いします。


CC BY-SA 3.0
2017-01-20T07:07:59.560
32017
2017-01-21T18:57:50.947
2017-01-20T12:20:58.130
19716
19716
question
google-app-engine google-cloud
proxy環境下でCloudへのデプロイに失敗する


おそらく、httplib2のバージョンが古いために発生する問題かと思います。  
(httplib2のバージョン2 0.9以前で発生すると思われます。)  
現在は、Python2、Python3用、いずれも、proxy_rdnsのデフォルトはTrueになったようです。

[httplib2のソース
(Python3用)](https://github.com/httplib2/httplib2/blob/master/python3/httplib2/__init__.py)  
[httplib2のソース
(Python2用)](https://github.com/httplib2/httplib2/blob/master/python2/httplib2/__init__.py)

> proxy_rdns: If True (default), DNS queries will not be performed  
>  locally, and instead, handed to the proxy to resolve. This is useful  
>  if the network does not allow resolution of non-local names. In  
>  httplib2 0.9 and earlier, this defaulted to False.
[code]

    class ProxyInfo(object):
    ・・・
    def __init__(self, proxy_type, proxy_host, proxy_port, proxy_rdns=True, proxy_user=None, proxy_pass=None, proxy_headers=None):
    
[/code]

* * *

古いと思われる[ソース](https://github.com/GoogleChrome/chromium-
dashboard/blob/master/scripts/httplib2/__init__.py)を見ると、proxy_rdnsがNone(旧デフォルト値)の場合は、  
プロキシ用のホストやポートが取得できないバグがあったようですので、  
(アップデート前であれば)質問で提示されている対応で正しいかと思います。

該当箇所：

[code]

    class HTTPConnectionWithTimeout(httplib.HTTPConnection):
    ・・・
     if use_proxy and proxy_rdns:
            host = proxy_host
            port = proxy_port
        else:
            host = self.host
            port = self.port
    
[/code]


CC BY-SA 3.0
2017-01-21T18:57:50.947
32045
2017-01-21T18:57:50.947
10572
32017
answer