mysql-pythonを使うときに気をつけること

MySQLを自分でコンパイルをしている場合などに、mysql-pythonを利用しようとすると、以下のような Tracebackがでることがあります。

$ python
>>> import MySQLdb
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python2.5/site-packages/MySQL_python-1.2.3c1-py2.5-linux-i686.egg/MySQLdb/__init__.py", line 19, in
import _mysql
ImportError: libmysqlclient_r.so.15: cannot open shared object file: No such file or directory

上記のようなTracebackがでている場合は、 mysqlのライブラリが読み込めない状態になっています。
Fedora10 であれば、通常は yum から mysql-libs をインストールすれば解決します。

しかし、 Tritonnパッチが当たっているのコンパイル済み tar ball 等を利用している場合は、自分でパスを指定してあげる必要があります。

共有ライブラリを追加する手順として、

  1. 共有ライブラリのパスを指定したファイルを作成する
  2. 共有ライブラリがキャッシュされているファイルを更新する
  3. 反映されたか確認する

となります。

実際に、 /opt/mysqlにインストールされているTritonn-MySQLのライブラリを追加するには、

1-1. mysql-tritonn.confを作成する

  • Fedora10 では、新たに追加しやすいように、 /etc/ld.so.conf.d が用意されています。
  • ディレクトリ配下に、 mysql-tritonn.conf を作成します。

1-2. パスを追記する

2. ldconfigコマンドを利用し、キャッシュへ反映させます。
3. ldconfig -p で確認する。

  • libmysqlclient_r.so.15, libmysqlclient.so.15 が追加されていれば成功です。

反映の手順 (mysql-tritonn.confへは、パスが設定済みとします)

# cat /etc/ld.so.conf.d/mysql-tritonn.conf
/opt/mysql/lib
# ldconfig
# ldconfig -p | grep mysql
        libmysqlclient_r.so.15 (libc6) => /opt/mysql/lib/libmysqlclient_r.so.15
        libmysqlclient.so.15 (libc6) => /opt/mysql/lib/libmysqlclient.so.15

動作確認をする

$ python
>>> import MySQLdb

Tracebackが出力されなければ、設定は成功です。


現在のポスト数 59 / 100

Fedora 10以降で、起動メッセージを表示させるようにする

起動時に詳細な起動メッセージが、デフォルトでは表示されなくなってます。
表示させるには grub.conf の起動オプションを変更する必要があります。

起動オプションから、 rhgb quiet を削除すると起動メッセージが表示されるようになります。

http://www.redhat.com/archives/rhl-list/2004-May/msg07775.html


現在のポスト数 58 / 100

Fedora11 へ Systemtap 1.0 をインストールする

先日、Systemtap 1.0 *1 が公開されたので、Fedora11 へインストールしてみます。

yum からインストールします。

yum install systemtap kernel-devel
yum --enablerepo=fedora-debuginfo --enablerepo=updates-debuginfo install kernel-debuginfo

ここで、再起動させます。

とりあえず、 Hello, World を
hello.stp というファイルを以下のように作成します。

probe begin
{
  print ("hello, world\n")
  exit ()
}

stap コマンドで実行させます。

# stap hello.stp
hello, world


現在のポスト数 57 / 100

はじめてのTornado

レスポンスの遅い応答を返すデバック用サーバがほしかったので、
Tornadoで作ってみました。

Tornado は、 URLパターン中に正規表現を入れると、リクエストハンドラーへリクエスト引数として渡すことができます。

class himote_check_handler(tornado.web.RequestHandler):
  # ([0-9]+)にマッチする箇所が、 uidとして渡される
  def get(self, uid):
    response_json = "{'mote_event_avg': %2.11f, 'user_id': %s}"
    # response delay
    uid_val = int(uid)
    if uid_val > 6000:
      os.system('sleep %d' % (uid_val / 1000))
    # response json format
    self.write(response_json % (10.0/3.0, uid))

application = tornado.web.Application([
  (r"/", MainHandler),
  # uidを引数で渡す
  (r"/atnd/uid/([0-9]+)", himote_check_handler),
])

全体のサンプル

import os
                                                                                                                        
import tornado.httpserver
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.write("Hello, world")

class himote_check_handler(tornado.web.RequestHandler):
  def get(self, uid):
    response_json = "{'mote_event_avg': %2.11f, 'user_id': %s}"
    # response delay
    uid_val = int(uid)
    if uid_val > 6000:
      os.system('sleep %d' % (uid_val / 1000))
    # response json format
    self.write(response_json % (10.0/3.0, uid))

application = tornado.web.Application([
  (r"/", MainHandler),
  (r"/atnd/uid/([0-9]+)", himote_check_handler),
])

def main():
  http_server = tornado.httpserver.HTTPServer(application)
  http_server.listen(8888)
  tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
  main()


和訳のおかげで簡単にできました。
http://tornado.shibu.jp/index.html


現在のポスト数 56 / 100

Code Camp #4

Code Camp in Harumi #4 に参加しました。
今回は、全体でのアウトプットがある回になりました。

昨日、発表された Tornado Web Server の翻訳が行われました。
参加者の

  • @ymotongpoo
  • @shibukawa
  • @nishio
  • @atusi

さんたちががんばってくれました。

今回のキーワード: 非モテ、Tornado、翻訳スプリント、NEXない、SSD早い
今回も Android やってました。


現在のポスト数 55 / 100

Snow Leopard で virtualenv が動かない

Snow Leopard がそのままでは動きません。 (version 1.3.3)
すでに、Google Group上で議論されているようで、パッチがでています。
trunk にも反映されているようです。

パッチを当てたら、動作しました。

パッチを当てるか、trunk使いましょう。

trunk (bitbucket.org -- version 1.3.4dev)
http://bitbucket.org/ianb/virtualenv/

パッチ
http://groups.google.com/group/python-virtualenv/attach/ebeece6a42e1a10b/virtualenv.patch?part=2


現在のポスト数 54 / 100

ls ~ を晒すのが流行っているらしいので

01:53:37@~$ ls ~
Desktop            Dropbox            Movies             Public             works
Documents          Library            Music              Sites              ユーザ登録
Downloads          Mailbox            Pictures           local

面白みも無いですね。
基本、worksにいれます。

参考: http://d.hatena.ne.jp/Yoshiori/20090826/1251283425


現在のポスト数 53 / 100