Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 为什么我在尝试将值附加到wtforms validtor时,Google app engine上的flask出现超时异常?_Google App Engine_Flask_Flask Wtforms_Socket Timeout Exception - Fatal编程技术网

Google app engine 为什么我在尝试将值附加到wtforms validtor时,Google app engine上的flask出现超时异常?

Google app engine 为什么我在尝试将值附加到wtforms validtor时,Google app engine上的flask出现超时异常?,google-app-engine,flask,flask-wtforms,socket-timeout-exception,Google App Engine,Flask,Flask Wtforms,Socket Timeout Exception,我无法将flask应用程序部署到Google应用程序引擎。当我在本地运行它时,它可以正常工作,但一旦部署到应用程序引擎,它就会失败。除了两个例外(我总是两个都要,我不确定哪一个先到) 及 它始终发生在表单的\uuuu init\uuu函数中。特别是在那里,当我尝试将一个验证器附加到验证器列表时 self.password.validators.append(InputRequired(message='Please enter password!')) 它不是特定于这个验证器的,其他验证器也会

我无法将flask应用程序部署到Google应用程序引擎。当我在本地运行它时,它可以正常工作,但一旦部署到应用程序引擎,它就会失败。除了两个例外(我总是两个都要,我不确定哪一个先到)

它始终发生在表单的
\uuuu init\uuu
函数中。特别是在那里,当我尝试将一个验证器附加到验证器列表时

self.password.validators.append(InputRequired(message='Please enter password!'))
它不是特定于这个验证器的,其他验证器也会发生同样的情况。我完全不知道附加验证器为什么以及如何与SMTP或套接字交互。 我注意到的一件事是,我的电子邮件验证器有一个问题,它在本地也可以正常工作,但需要我安装模块“Email_validator”才能工作。当我这样做的时候,它抱怨说当我试图在一个元组上附加一个验证器时,它不能使用append-on-tuple(在我的本地应用程序中是一个列表),但由于某种原因,当我在应用程序引擎上运行完全相同的代码时,它变成了一个元组。我完全删除了电子邮件验证器(以及导入/需求),现在我遇到了上面描述的问题。它可能与电子邮件验证程序问题有关,也可能与此无关

更新:错误消息似乎确实与验证器有关。append()调用通过在对象创建时设置验证器并避免通过验证器进行所有进一步的更改,为我解决了这个问题。这是应用程序附带的requirements.txt:

blinker>=1.4
Click>=7.0
Flask>=1.1.1
Flask-Login>=0.5.0
Flask-Mail>=0.9.1
Flask-SQLAlchemy>=2.4.1
Flask-WTF>=0.14.3
itsdangerous>=1.1.0
Jinja2>=2.11.1
MarkupSafe>=1.1.1
PyJWT>=1.7.1
PyMySQL>=0.9.3
python-dotenv>=0.11.0
SQLAlchemy>=1.3.13
Werkzeug>=1.0.0
WTForms>=2.2.1
我可以提供在GAE上实例化时引起问题的表单的最小化版本,而不是完整的最小、可复制的示例:

class ExampleForm(FlaskForm):
    name = StringField('Name')
    original_name = HiddenField('Original Name')

    def add_validators(self):
        names = [a.name for a in Users.query.all()]
        if self.original_name.data:
            names.remove(self.original_name.data)
        self.name.validators.append(InputRequired(message='Please enter name!'))
        self.name.validators.append(NoneOf(names, message='Username already exists!'))

    def __init__(self):
        super().__init__(*args, **kwargs)
        self.add_validators()

在我写这篇文章时,我突然想到,可能我需要在创建时总是初始化一个空的验证器列表,以确保新条目可以附加到它(就像普通列表一样),就像这样
name=StringField('name',validators=[])
。我仍然不明白为什么它在本地工作,但如果它解决了问题,那对我来说才是真正重要的。

您是否介意共享应用程序的一部分,或者至少是Flask应用程序中麻烦处理程序的代码?您对验证器(,)使用的确切依赖项(包括确切版本)是什么?你有什么特别的配置吗?另外,您使用的是GAE标准还是灵活?@DanielOcando我完全避免使用validators.append,而是依赖于在对象创建时设置验证器。这并不理想,但目前还有效。创建一个最小的、可复制的示例有点复杂,考虑到它所嵌入的项目的规模,以及我当前的时间限制,我现在宁愿避免这样做。我们没有使用任何特定的防火墙规则来影响这一点,这是GAE标准应用程序,我将在主要问题后附加requirements.txt。很高兴知道您是如何解决的。你能把你的解决方案发布为一个答案,以便它能让其他人看到同一个问题吗?“快乐Maad我不认为它是这个问题的一个实际的解决方案,因为它只是通过避免一个我应该能够使用的方法(附加在验证者列表上)来完成的。这很可能只是一个临时解决方案,我最终将不得不再次处理它。您是否介意共享您的应用程序的一部分,或者至少共享您的Flask应用程序中麻烦处理程序的代码?您对验证器(,)使用的确切依赖项(包括确切版本)是什么?你有什么特别的配置吗?另外,您使用的是GAE标准还是灵活?@DanielOcando我完全避免使用validators.append,而是依赖于在对象创建时设置验证器。这并不理想,但目前还有效。创建一个最小的、可复制的示例有点复杂,考虑到它所嵌入的项目的规模,以及我当前的时间限制,我现在宁愿避免这样做。我们没有使用任何特定的防火墙规则来影响这一点,这是GAE标准应用程序,我将在主要问题后附加requirements.txt。很高兴知道您是如何解决的。你能把你的解决方案发布为一个答案,以便它能让其他人看到同一个问题吗?“快乐Maad我不认为它是这个问题的一个实际的解决方案,因为它只是通过避免一个我应该能够使用的方法(附加在验证者列表上)来完成的。这很可能只是一个暂时的解决方案,我最终将不得不再次处理它。
blinker>=1.4
Click>=7.0
Flask>=1.1.1
Flask-Login>=0.5.0
Flask-Mail>=0.9.1
Flask-SQLAlchemy>=2.4.1
Flask-WTF>=0.14.3
itsdangerous>=1.1.0
Jinja2>=2.11.1
MarkupSafe>=1.1.1
PyJWT>=1.7.1
PyMySQL>=0.9.3
python-dotenv>=0.11.0
SQLAlchemy>=1.3.13
Werkzeug>=1.0.0
WTForms>=2.2.1
class ExampleForm(FlaskForm):
    name = StringField('Name')
    original_name = HiddenField('Original Name')

    def add_validators(self):
        names = [a.name for a in Users.query.all()]
        if self.original_name.data:
            names.remove(self.original_name.data)
        self.name.validators.append(InputRequired(message='Please enter name!'))
        self.name.validators.append(NoneOf(names, message='Username already exists!'))

    def __init__(self):
        super().__init__(*args, **kwargs)
        self.add_validators()