希望每次部署后都能执行一部分代码,这些代码中有查询的操作,但写在cloud.py的全局部分会报错。

engine = Engine()
obj = leancloud.Object.extend('Test').query.get('xxxxxxxxxxx')
print('obj = ', obj)

报错:

RuntimeError: LeanCloud SDK must be initialized

我研究了一下大概找到问题所在,就是wsgi.py文件里在leancloud.init()之前就会import cloud,这个import会执行函数外面的所有全局代码,而此时是没有init的所以执行失败。我在cloud.py里写了一个新函数initAfterDeploy(),然后wsgi.py文件改成这样,就可以保证在部署成功后正确调用:

我尝试过在43行、46行处调用,都失败了,只有写在27行这里才没问题。希望请负责python sdk的同学帮忙确认一下写在27行这里是否安全和正确,谢谢!

写在 43、46 失败是因为 if __name__ == '__main__' 处的代码只会在本地调试时实行(30 行有注释「只在本地开发环境执行的代码」)。

您现在这样写没问题。

从模板项目设计的初衷来说,cloud.py 里是放云函数(包括 hook)定义的。所以如果这个 initAfterDeploy() 另外放在一个单独的模块/文件看起来清晰一点。还有就是 python 社区的习惯是用 snake case 而不是驼峰。不过这些都是些非实质性的问题。

好的,非常感谢!以前习惯驼峰,一开始还是python新手的时候做的leancloud老项目上万行都这么写下来,现在不好改了 stuck_out_tongue_closed_eyes