読者です 読者をやめる 読者になる 読者になる

CentOSでTornadoを使う

Python

皆が大好きなCentOS 5のcurlのバージョンは、

% rpm -qa | grep curl
curl-7.15.5-2.1.el5_3.5
curl-devel-7.15.5-2.1.el5_3.5

のように7.15.5で、このままでは以下のバグに当たってtornado.httpclient.HTTPClientで取得したレスポンスのヘッダーを取得できない。

このIssueではpycurlの7.16.4以降が必要とされているけど、以下のようなパッチをあてればpycurl==7.15.5.1でも動く。

--- pycurl-7.15.5.1.orig/src/pycurl.c   2010-03-18 03:00:06.000000000 +0900
+++ pycurl-7.15.5.1/src/pycurl.c        2010-03-18 03:00:40.000000000 +0900
@@ -1851,7 +1851,8 @@
     }

     /* Handle the case of function objects for callbacks */
-    if (PyFunction_Check(obj) || PyCFunction_Check(obj) || PyMethod_Check(obj)) {
+    if (PyFunction_Check(obj) || PyCFunction_Check(obj) ||
+       PyCallable_Check(obj) || PyMethod_Check(obj)) {
         /* We use function types here to make sure that our callback
          * definitions exactly match the <curl/curl.h> interface.
          */

自分でcurlをビルドしたり、万が一/usrのような場所にcurlを上書きインストールすると大変面倒なことになるので、CentOS標準のcurlで動くというメリットは大きい。EPELのpython-pycurlのRPMには特にパッチはあたっていないようだったので後でEPELには報告しておこう。(EPELのバグレポートの仕方がよく分からない。)

ただ、古いpycurlだとレスポンスヘッダーが取得できない件は、Tornadoの方のコードの不備だと思う。こっちも報告しておかなければ。

そもそもTornadoはどこまで本気なのかよく分からない。なぜcurlを使う。