最新消息:

debug一个使用Alfred往七牛传图片的问题

Mac工具 niuge678 919浏览 0评论

首先介绍下故事的背景。在使用 markdown 写文章时,经常需要插入图片。我使用七牛云做图床,借助一款 Alfred 插件,使用一个快捷键就可以迅速地把一张图片上传然后得到一个链接(http 链接)。这个功能我使用了几年,一直没遇到什么问题。最近把域名升级为了 https,由于 chrome 浏览器不支持 https 域名下访问 http 链接,所以也需要把图片链接地址升级为 https。本以为是一件很简单的事情,结果却并非如此,原来的 Alfred 插件无论如何也不能上传成功。本文记录一下 debug 的过程,以及解决方法。

markdown-img-upload 插件

这是一款十分好用的 Alfred 插件,github 地址。在开启 Alfred 的情况下,只需要执行快捷键cmd + ctrl + v(可自定义)就可以迅速地把一张图片上传然后得到一个链接。只需要申请一个 免费的七牛账号,在 Alfred workflow 里配置一下,就可以解决图片保存的问题。不过,原来的插件只能支持生成 http 链接,我在尝试上传给绑定 https 的七牛 bucket 时,一直失败。

怀疑新创建的七牛 bucket 有问题

这是最先想到的原因。我在本地使用 python 脚本尝试了新 bucket 的上传,没有问题。

节点没有问题,代码一样,于是我在本地反复切换配置,奇怪的是原来的 bucket 上传成功,新创建的 bucket 继续失败,所以我怀疑可能是 python 的版本有问题。

怀疑 python 版本

由于 Alfred 不支持 python3,我怀疑是 python 的版本不对。在本地分别尝试了 python2、python3 结果也没有问题。到这里,我就有点懵住了,死活想不出到底是哪里出了问题。

bucket 都没问题,Alfred 代码一样,python 版本没问题,究竟是哪里出了问题。

使用 Alfred 的 debug 功能

实在想不出是哪里出了问题,后来还给七牛云提了工单。我一度怀疑过是新创建的七牛 bucket https 相关配置有问题。不过后来本地能够上传成功,说明七牛是没问题的。

之后我搜索了如何 debug Alfred workflow。打开 debug 窗口其实十分简单。

在 Python 脚本中可以这样输出调试信息:

import sys
sys.stderr.write("Log this to the console")

我把几乎所有能打的信息,例如 path,uploadName,fileSize,上传结果都打印出来,在新旧 bucket 下进行对比,除了结果不同,其它都一模一样。新 bucket 的上传结果是 None。在提交的工单对话中,我了解到 None 通常意味着没有上传 token。于是我把 token 又都打印出来,结果新 bucket 也能产生 token。我又懵住了,此时,我并未意识到是这个 token 有问题。等到晚上睡觉时,我又回想到底是哪里出了问题,才意识到可能是插件使用的七牛 sdk 有问题。第二天,我看了一下源代码,确实是5年前的代码,于是我想试一下最新的七牛 sdk。

尝试最新的七牛 sdk

找到 Alfred workflow 的位置,下载最新版本的七牛 sdk,替换原来的。

原来的版本是7.0.5,现在替换为了7.5.0

再次尝试,依然失败。提示找不到 requests 包。替换为原来 SDK 包没有这样的问题。在本地使用 pip list | grep requests 显示已经安装成功。后来仔细查看才发现,插件的作者在代码中初始化了一个路径。

添加此语句后,还提示安装 pyOpenSSL,随后上传成功。

import sys
sys.path = ['/usr/local/lib/python2.7/site-packages'] + sys.path

总结

虽然是一个简单问题,但还是花了不少时间来解决,结果很好。对 Python 其实不太熟悉,在 debug 的过程中,还是学到了很多 Python、Alfred 相关的知识,很有意义的一次 deubg,感觉又可以用很多年。

转载请注明:牛哥678 » debug一个使用Alfred往七牛传图片的问题

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址