尝试在emacs中使用Ipython笔记本时websocket出错

时间:2014-03-05 15:35:58

标签: emacs websocket ipython tornado ipython-notebook

在尝试评估我的代码

时,在缓冲区警告中收到一些错误消息
Error (websocket): in callback `on-open': Cannot send message to a closed websocket: cl-struct-websocket-frame, text, "{\"header\":{\"msg_id\":\"14735853-0ed2-4ef4-8f5a-312a198dd251\", \"username\":\"username\"\, \"session\":\"ab484abf-d4e6-4f83-2c2-de1b65264780\", \"msg_type\":\"execute_request\"}, \"metadata\":{}, \"content\":{\"code\":\"__import__('sys').stdout.write(__import__('os').getcwd())\", \"silent\":true, \\"user_variables\":[], \"user_expressions\":{}, \"allow_stdin\":false}, \"parent_header\":{}}", nil, t
Error (websocket): in callback `on-open': Wrong type argument: arrayp, nil
Error (websocket): in callback `on-close': Wrong type argument: arrayp, nil

在ipython服务器端,我看到了这条消息

2014-03-05 23:24:40.760 [NotebookApp] WARNING | Cross Origin WebSocket Attempt.
2014-03-05 23:24:40.761 [tornado.application] ERROR | Uncaught exception in /kernels/2691bbe3-ce95-439b-a9ce-97ec52c80988/shell
Traceback (most recent call last):
  File "/home/haroldwu/Python-test/lib/python3.3/site-packages/tornado/websocket.py", line 322, in wrapper
    return callback(*args, **kwargs)
  File "/home/haroldwu/Python-test/lib/python3.3/site-packages/IPython/html/base/zmqhandlers.py", line 114, in open
    raise web.HTTPError(404)
tornado.web.HTTPError: HTTP 404: Not Found

我做了什么:

  1. 升级我的python virtualenv和全局环境的所有包
  2. 升级所有系统包(Archlinux最新64位)
  3. 升级所有emacs包
  4. 搜索网页(但未找到有用的结果)
  5. Ipython笔记本几周前在我的emacs上工作了,但不知何故它现在不起作用...... 我对龙卷风没有经验。

    感谢您的帮助! :)

1 个答案:

答案 0 :(得分:2)

我猜测emacs没有发送由Notebook WS代码检查的Origin标头。请参阅我的评论https://github.com/ipython/ipython/issues/5525

快速解决方法是在/home/haroldwu/Python-test/lib/python3.3/site-packages/IPython/html/base/zmqhandlers.py:114注释掉同一来源检查。

您始终可以在parsed_origin的{​​{1}}函数中添加originorigin_headersame_origin()的日志记录,并相应地修复emacs包。