当服务器绑定到特定IP(不是localhost)时,如何使Google App Engine python SDK Remote API与本地开发服务器一起使用?

dre*_*lio 3 python google-app-engine

使用远程api(remote_api_shell.py)在生产服务器上正常工作.但是,它仅适用于开发服务器上的开发服务器localhost.当服务器在特定IP上运行时(例如,dev_appserver.py --host=192.168.0.1),它不起作用.

这是使用Python SDK.我确信这适用于版本1.7.5.它不适用于1.7.61.8.0.

这是一个特定的案例:

运行服务器并将其绑定到默认地址(localhost:8080):

/path/to/dev_appserver.py myapp/app.yaml
INFO     2013-05-25 19:11:15,071 sdk_update_checker.py:244] Checking for updates to the SDK.
INFO     2013-05-25 19:11:15,323 api_server.py:152] Starting API server at: http://localhost:39983
INFO     2013-05-25 19:11:15,403 dispatcher.py:98] Starting server "default" running at: http://localhost:8080
INFO     2013-05-25 19:11:15,405 admin_server.py:117] Starting admin server at: http://localhost:8000
Run Code Online (Sandbox Code Playgroud)

启动远程API shell,它工作正常:

$ ./remote_api_shell.py -s localhost:8080
Email: x@x
Password: 
App Engine remote_api shell
Python 2.7.2+ (default, Jul 20 2012, 22:15:08) 
[GCC 4.6.1]
The db, ndb, users, urlfetch, and memcache modules are imported.
dev~furloughfun> 
Run Code Online (Sandbox Code Playgroud)

但是,如果使用指定的主机启动服务器:

/path/to/dev_appserver.py --host=192.168.0.1 myapp/app.yaml
INFO     2013-05-25 19:11:53,304 sdk_update_checker.py:244] Checking for updates to the SDK.
INFO     2013-05-25 19:11:53,554 api_server.py:152] Starting API server at: http://localhost:44650
INFO     2013-05-25 19:11:53,633 dispatcher.py:98] Starting server "default" running at: http://192.168.0.1:8080
INFO     2013-05-25 19:11:53,634 admin_server.py:117] Starting admin server at: http://localhost:8000
Run Code Online (Sandbox Code Playgroud)

请注意,Starting API server at: http://localhost:44650即使内容是在服务于http://192.168.0.1:8080.这是否表示您只能在localhost上运行远程api?也许是出于安全考虑?

此外,当您尝试remote_api_shell.py现在时,您只能使用有效帐户登录(不允许虚假帐户),并立即出错并终止.

控制台错误以:

urllib2.HTTPError: HTTP Error 200: OK
Run Code Online (Sandbox Code Playgroud)

和本地开发服务器输出:

INFO 2013-05-25 19:24:06,674 server.py:528] "GET /_ah/remote_api?rtok=90927106532 HTTP/1.1" 401 57
Run Code Online (Sandbox Code Playgroud)

谁知道这里发生了什么?
是否无法访问除以外的远程API localhost?如果您的内容是在特定IP上提供的,
是否无法访问远程API(甚至是localhost)?

Rob*_*ujo 6

似乎api服务器没有设置主机的选项.dev_appserver.py具有为内容和管理服务器设置主机和端口的选项,以及仅用于api服务器端口(api_port选项)的选项.例:

dev_appserver.py --host=192.168.5.92 
                 --admin_host 192.168.5.92 --admin_port 9000 
                 --api_port 7000 .
Run Code Online (Sandbox Code Playgroud)

运行此报告:

 api_server.py:153] Starting API server at: http://localhost:7000

 dispatcher.py:164] Starting server "default" running at: http://192.168.5.92:8080

 admin_server.py:117] Starting admin server at: http://192.168.5.92:9000
Run Code Online (Sandbox Code Playgroud)

查看GAE dev_appserver的来源,启动服务器的api_server方法的调用者是模块devappserver2.py,行是:

apis = api_server.APIServer('localhost', options.api_port,
                             configuration.app_id)
Run Code Online (Sandbox Code Playgroud)

您可以看到硬编码的主机名localhost.

如果你发现没有很好的解决办法,我建议修补 devappserver2.py通过引入一个新的选项和所附的报告问题与补丁