描述

SAE(SinaAppEngine) + webpy + qiniu sdk 实现生成token的业务接口 产生一系列问题

在部署的过程中遇到问题

问题1 引用qiniu for python 包

在SAE 中创建python web应用的过程中默认是支出webpy 的,无需安装。但是遇到qiniu sdk for python 就需要安装了。

在index.wsgi 的同级目录下创建 vendor目录或者其他名字$mkdir vendor

然后用pip命令将qiniu 安装在vendor目录下$pip install -t vendor qiniu

修改index.wsgi 文件头添加如下

import sae
app_root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(app_root, 'vendor'))

同时以上方法也是SAE中加载其他包的方式之一

问题2 IO 错误

上传index.wsgi 文件,发起请求,发现依然不行,此时认真观察SAE中app 日志将发现如下IO操作错误

File "/data1/www/htdocs/421/xetapp/1/vendor/qiniu/zone.py", line 22, in Zone
    def __init__(self, up_host=None, up_host_backup=None, io_host=None, host_cache={}, scheme="http", home_dir=tempfile.gettempdir()):
  File "/usr/local/sae/python/lib/python2.7/tempfile.py", line 269, in gettempdir
    tempdir = _get_default_tempdir()
  File "/usr/local/sae/python/lib/python2.7/tempfile.py", line 212, in _get_default_tempdir
    ("No usable temporary directory found in %s" % dirlist))
IOError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/data1/www/htdocs/421/xetapp/1']  yq26 

注: 我发的请求是POST

错误日志提示的非常明白,zone.py 文件中的__inint__ 方法的tempfile.gettempdir() 在请求/tmp 、/var/tmp等,目录,然而SAE中并没有这些目录

将home_dir=tempfile.gettempdir() 改为 home_dir=sae.core.get_tmp_dir() 使用SAE中的tmpdir

不要忘记在zone.py 文件头加入import aes 否则会报错

同理在qiniu/services/storage/upload_progress_recorder.py 中的record_folder=tempfile.gettempdir() 改为 record_folder=sae.core.get_tmp_dir()

不要忘记在upload_progress_recorder.py 文件头加入import aes 否则会报错


lakeside
118 声望0 粉丝