如何在Google App Engine开发服务器上运行两个版本的Python应用程序
我正在使用Ubuntu Server 13.10和Python 2.7。
我想要我的App Engine应用有两个版本:一个是管理版本,另一个是默认版本。我已经定义了这两个版本。目前,我的app.yaml
文件是这样的:
application: application-id
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /css
static_dir: css
- url: /js
static_dir: js
- url: /
script: python.MainPage.application
- url: /test.*
script: gaeunit.application
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
version: admin
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /css
static_dir: css
- url: /js
static_dir: js
- url: /.*
script: python.MainPage.application
login: admin
auth_fail_action: unauthorized
- url: /test.*
script: python.MainPage.appication
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
当我把这段代码部署到App Engine时,一切都按预期工作。但是,如果我尝试使用Google Cloud SDK中的dev_appserver.py
来运行它,就会出现错误,具体错误信息如下:
Traceback (most recent call last):
File "/home/katie/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 82, in <module>
_run_file(__file__, globals())
File "/home/katie/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 78, in _run_file
execfile(_PATHS.script_file(script_name), globals_)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 902, in <module>
main()
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 895, in main
dev_server.start(options)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 672, in start
options.yaml_files)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/application_configuration.py", line 556, in __init__
module_configuration = ModuleConfiguration(yaml_path)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/application_configuration.py", line 82, in __init__
self._yaml_path)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/application_configuration.py", line 272, in _parse_configuration
return appinfo_includes.ParseAndReturnIncludePaths(f)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/api/appinfo_includes.py", line 63, in ParseAndReturnIncludePaths
appyaml = appinfo.LoadSingleAppInfo(appinfo_file)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/api/appinfo.py", line 1826, in LoadSingleAppInfo
listener.Parse(app_info)
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/api/yaml_listener.py", line 226, in Parse
self._HandleEvents(self._GenerateEventParameters(stream, loader_class))
File "/home/katie/google-cloud-sdk/platform/google_appengine/google/appengine/api/yaml_listener.py", line 177, in _HandleEvents
raise yaml_errors.EventError(e, event_object)
google.appengine.api.yaml_errors.EventError: Duplicate attribute 'version'.
in "aerobic-arcade-514/default/app.yaml", line 24, column 10
1 个回答
2
你可以在两个不同的端口上启动两个不同的开发应用服务器,只需要用 --port=
参数来覆盖默认的端口。不过,你需要有两个分开的 app.yaml
文件,而不是像之前那样使用同一个文件。当你运行 dev_appserver.py
时,要把配置文件作为最后一个参数传入,而不是目录(默认是 app.yaml
)。
举个例子:
dev_appserver.py --port=8888 app_one.yaml
dev_appserver.py --port=9999 app_two.yaml
在你测试完之后,部署之前,确保你留下的最终文件名是 app.yaml
;否则,你将无法完成这个过程。