明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

cherrypy に trac を載せた話

どういうこと?

仕事では受託開発をしており、プロジェクトにより開発環境が変わるのでポータブルなツールを利用することを心がけています。

最近は作業の管理に Issue Tracking System を利用しているのだが、(客先でのセキュリティポリシーなどの話もあり)外部のサービスは利用できません。

世間的には ITS としては Redmine が有力だと思うのですが、別途 DB が必要だったり機能が多すぎたりするので、最近勢いはないですが Python だけあれば利用できる Trac を使っています。

私が Ruby(on Rails) より Python が好きというのも大きいですが

いつもは、組み込みの Web サーバである tracd を利用しているのですが、 WSGI サーバである CherryPy を利用する場合についてまとめておきます。

プロジェクトをデプロイする

> trac-admin path\to\trac_project deploy path\to\deploy

上記のコマンドを実行すると、 path\to\deploy\cgi-bin\trac.wsgi が生成されます。

trac.wsgiCherryPy から利用するために、 wsgi.py にリネームしておきます。

CherryPy をインストールする

> pip install CherryPy

だけで OK です。

サーバスクリプトを作成する

以下のようにサーバスクリプトを作成しました。

  • path\to\deploy\cgi-bin\server.py
# Import your application as:
# from wsgi import application
# Example:

from wsgi import application

# Import CherryPy
import cherrypy

if __name__ == '__main__':

    # Mount the application
    cherrypy.tree.graft(application, "/")

    # Unsubscribe the default server
    cherrypy.server.unsubscribe()

    # Instantiate a new server object
    server = cherrypy._cpserver.Server()

    # Configure the server object
    server.socket_host = "0.0.0.0"
    server.socket_port = 80
    server.thread_pool = 30

    # Subscribe this server
    server.subscribe()

    # Start the server engine (Option 1 *and* 2)
    cherrypy.engine.start()
    cherrypy.engine.block()

完全に公式のサンプルそのままです(笑)

CherryPy を利用したのは、更に Windows サービス化を行うための前フリだったりします。

Windows サービス化については後日まとめます。