2015-08-31 33 views
2

就遇到了这个问题,试图调用braintree.ClientToken.generate()从谷歌App Engine应用程序,在运行dev_appserver.py瓶。 dev_appserver.py目前无法进行传出SSL连接。在进行以上布伦特里调用产生解决方法dev_appserver.py无法作出SSL请求

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

呼叫工作在一个真实的环境GAE。它用在我的一个观点中,所以当它失败时,它会打破我的整个网站流程,出现上述500错误。我该如何解决这个问题,以便在当地环境中继续发展?

回答

1

我在布伦特里工作。如果您有更多问题,可以随时拨打contact our support team

有关GAE上Braintree Python库的帮助,请参阅this example on my GitHub。要回答你的问题,你可以force the dev server to use the real Python socket library,所以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) 
+0

这是一个不同的问题(我认为)的答案。如果我理解正确,这将启用到dev_appserver.py的传入SSL连接,而不是传出的连接。我遇到的问题是dev_appserver无法创建传出的SSL连接。当所有我能找到的与我的问题有关的所有问题都是这个答案时,我感到非常沮丧,当然,我试图无利可图,遍布整个互联网。 – brandones

+0

@brandones你错了。此修复程序专门用于启用传出SSL连接。 – agf

+0

没有为我工作。这个修补程序有几个变种,我也试过。我只是不断得到相同的错误 - “ConnectionError:('连接中止。',错误(13,'权限被拒绝'))' – brandones

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() 
相关问题