2

尝试braintree.ClientToken.generate()从运行 Flask 的 Google App Engine 应用程序调用时遇到了这个问题dev_appserver.pydev_appserver.py当前无法进行传出 SSL 连接。进行上述braintree调用会产生

ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))

该调用在真实的 GAE 环境中运行。它在我的一个视图中使用,因此当它失败时,它会以上述 500 错误破坏我的整个网站流程。我该如何解决这个问题,以便我可以在本地环境中继续开发?

4

2 回答 2

1

如果您的应用程序有一些全局变量与您运行时相对应dev_appserver.py,您可以创建一个以该变量为条件的失败方法的模拟。

就我而言,该变量称为env_conf.FLASK_CONF. 我使用以下代码来模拟 Braintree 生成调用。

# Imports
import braintree
import env_conf
from flask import render_template

# Mock Braintree in DEV environment
if env_conf.FLASK_CONF == 'DEV':
    from functools import partial
    def mock_generate(self):
        return 'foobarbaz123'
    braintree.ClientToken.generate = partial(mock_generate, braintree.ClientToken())

# Add payment handler
def add_payment():
    token = braintree.ClientToken.generate()
    return render_template('add-payment.html',
                           braintree_client_token=token)

这个想法一般是:

import problem_function
if DEV_ENVIRONMENT:
    def mock_problem_fcn():
        return 'expected response'
    problem_function = mock_problem_function

problem_function()
于 2015-08-31T19:52:24.340 回答
1

我在布伦特里工作。如果您有更多问题,您可以随时联系我们的支持团队

有关 GAE 上 Braintree Python 库的帮助,请参阅我的 GitHub 上的此示例。要回答您的问题,您可以强制开发服务器使用真正的 Python 套接字库,以便 SSL 连接工作:

try:
    # This is needed to make local development work with SSL.
    # This must be done *before* you import the Braintree Python library.
    # See http://stackoverflow.com/a/24066819/500584
    # and https://code.google.com/p/googleappengine/issues/detail?id=9246 for more information.
    from google.appengine.tools.devappserver2.python import sandbox
    sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']

    import sys
    # this is socket.py copied from a standard python install
    import stdlib_socket
    sys.modules['socket'] = stdlib_socket
except ImportError as e:
    print(e)
于 2015-08-31T22:11:51.527 回答