Python dev#u appserver无法在Ubuntu docker容器上启动(ValidationError:Value';None';for application与表达式不匹配)
我在升级docker容器后开始看到这个问题。我找不到为app engine使用旧软件包的方法。使用options=157.x.y获取旧版本在Python dev#u appserver无法在Ubuntu docker容器上启动(ValidationError:Value';None';for application与表达式不匹配),python,google-app-engine,ubuntu-16.04,Python,Google App Engine,Ubuntu 16.04,我在升级docker容器后开始看到这个问题。我找不到为app engine使用旧软件包的方法。使用options=157.x.y获取旧版本在apt-get中不起作用 故障日志: Traceback (most recent call last): File "/usr/lib/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 103, in <module> _run_file(__fil
apt-get
中不起作用
故障日志:
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 103, in <module>
_run_file(__file__, globals())
File "/usr/lib/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 97, in _run_file
execfile(_PATHS.script_file(script_name), globals_)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 322, in <module>
main()
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 310, in main
dev_server.start(options)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 106, in start
env_variables=parsed_env_variables)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/application_configuration.py", line 851, in __init__
env_variables)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/application_configuration.py", line 131, in __init__
self._config_path)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/application_configuration.py", line 443, in _parse_configuration
config.application = self._forced_app_id
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/validation.py", line 361, in __setattr__
value = self.GetValidator(key)(value, key)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/validation.py", line 599, in __call__
return self.Validate(value, key)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/validation.py", line 881, in Validate
return self.validator(value, key)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/validation.py", line 599, in __call__
return self.Validate(value, key)
File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/validation.py", line 955, in Validate
'\'%s\'' % (value, key, self.re.pattern))
google.appengine.api.validation.ValidationError: Value 'None' for application does not match expression '^(?:(?:[a-z\d\-]{1,100}\~)?(?:(?!\-)[a-z\d\-\.]{1,100}:)?(?!-)[a-z\d\-]{0,99}[a-z\d])$'
我的dev_appserver版本也开始这样做 我深入研究了代码,发现参数解析器将一个空的app_id命令行参数设置为
“None”
(是的,这是一个字符串,不是一个非类型)。顺便说一句,app_id regex与大写字符不匹配,因此ValidationError会触发。(我很高兴是这样,否则它会悄悄地将我的应用程序命名为“无”,从而导致更棘手的错误)
我现在的解决方法是使用-A
标志从命令行显式传递应用程序的名称。请注意,这将覆盖app.yaml配置中的应用程序
变量
我原以为我的argparse版本坏了,但现在听起来像是一个dev_appserver bug
FROM ubuntu:16.04
RUN apt-get upgrade
RUN apt-get update
RUN apt-get install -y wget
RUN apt-get install -y curl
RUN apt-get install -y apt-transport-https
RUN echo "deb https://packages.cloud.google.com/apt cloud-sdk-xenial main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
RUN wget -O - https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
RUN apt-get update
RUN cat /etc/apt/sources.list.d/google-cloud-sdk.list
RUN apt-get install -y google-cloud-sdk
RUN apt-get install -y google-cloud-sdk-app-engine-python
WORKDIR /mycodepath
EXPOSE 8080