KPT itを動かして見ました。(CentOS5.5)

昨日MOONGIFTに載っていたアジャイル開発におけるKPTをまとめるのに役立つ·KPT it MOONGIFT を導入してみました。
手元のCentOS5.5にインストールして動かしてます。
前提として、Rubyは1.9.3が入っています。
その他rubygemsなどの基本的なものが入っている環境上で動かす手順です。

ソースコード取得

# git clone git://github.com/tyabe/kpt-it.git

環境を整える

とりあえず特にドキュメントも見当たらなかったのでトライ&エラーで実施。

# rackup 
/usr/local/ruby/1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- bundler/setup (LoadError)
        from /usr/local/ruby/1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /var/git/kpt-it/config/boot.rb:7:in `'
        from /usr/local/ruby/1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/ruby/1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /var/git/kpt-it/config.ru:8:in `block in 
' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:51:in `instance_eval' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:51:in `initialize' from /var/git/kpt-it/config.ru:1:in `new' from /var/git/kpt-it/config.ru:1:in `
' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:40:in `eval' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:40:in `parse_file' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:200:in `app' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:301:in `wrapped_app' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:252:in `start' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:137:in `start' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/bin/rackup:4:in `' from /usr/local/ruby/1.9.3/bin/rackup:19:in `load' from /usr/local/ruby/1.9.3/bin/rackup:19:in `
'

bundlerが必要みたいなのでインストール

# gem install bundler

再度rackup

# rackup 
Could not find multi_json-1.0.4 in any of the sources
Run `bundle install` to install missing gems.

bundle installで必要なものをインストール

# bundle install
Fetching source index for http://rubygems.org/
Using rake (0.9.2.2) 
Installing multi_json (1.0.4) 
Installing activesupport (3.1.3) 
Using builder (3.0.0) 
Installing i18n (0.6.0) 
Installing activemodel (3.1.3) 
Installing addressable (2.2.6) 
Installing bson (1.5.1) 
Installing bson_ext (1.5.1) with native extensions 
Using bundler (1.0.21) 
Installing crack (0.1.8) 
Installing diff-lcs (1.1.3) 
Installing erubis (2.7.0) 
Using mime-types (1.17.2) 
Installing grit (2.4.1) 
Installing launchy (2.0.5) 
Using rest-client (1.6.7) 
Installing rubyzip (0.9.5) 
Installing term-ansicolor (1.0.7) 
Installing heroku (2.14.0) 
Using rack (1.3.5) 
Installing url_mount (0.2.1) 
Installing http_router (0.10.2) 
Installing polyglot (0.3.3) 
Installing treetop (1.4.10) 
Installing mail (2.3.0) 
Installing mongo (1.5.1) 
Installing tzinfo (0.3.31) 
Installing mongoid (2.2.0) 
Using rack-protection (1.1.4) 
Using tilt (1.3.3) 
Using sinatra (1.3.1) 
Installing thor (0.14.6) 
Installing padrino-core (0.10.5) 
Installing padrino-helpers (0.10.5) 
Installing padrino-admin (0.10.5) 
Installing padrino-cache (0.10.5) 
Installing padrino-gen (0.10.5) 
Installing padrino-mailer (0.10.5) 
Installing padrino (0.10.5) 
Using ruby-hmac (0.4.0) 
Installing signature (0.1.2) 
Installing pusher (0.8.4) 
Installing rack-test (0.6.1) 
Installing rspec-core (2.7.1) 
Installing rspec-expectations (2.7.0) 
Installing rspec-mocks (2.7.0) 
Installing rspec (2.7.0) 
Installing sass (3.1.11) 
Installing settingslogic (2.0.6) 
Installing sinatra-flash (0.3.0) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

再度rackupで起動

# rackup 
/usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/mongo-1.5.1/lib/mongo/connection.rb:413:in `connect': Failed to connect to a master node at localhost:27017 (Mongo::ConnectionFailure)
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/mongo-1.5.1/lib/mongo/connection.rb:573:in `setup'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/mongo-1.5.1/lib/mongo/connection.rb:104:in `initialize'
        from /var/git/kpt-it/config/database.rb:14:in `new'
        from /var/git/kpt-it/config/database.rb:14:in `'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/reloader.rb:148:in `require'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/reloader.rb:148:in `safe_load'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/loader.rb:162:in `block in require_dependencies'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/loader.rb:160:in `each'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/loader.rb:160:in `require_dependencies'
        from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/loader.rb:67:in `load!'
        from /var/git/kpt-it/config/boot.rb:29:in `'
        from /usr/local/ruby/1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/ruby/1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /var/git/kpt-it/config.ru:8:in `block in 
' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:51:in `instance_eval' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:51:in `initialize' from /var/git/kpt-it/config.ru:1:in `new' from /var/git/kpt-it/config.ru:1:in `
' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:40:in `eval' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/builder.rb:40:in `parse_file' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:200:in `app' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:301:in `wrapped_app' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:252:in `start' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/server.rb:137:in `start' from /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/bin/rackup:4:in `' from /usr/local/ruby/1.9.3/bin/rackup:19:in `load' from /usr/local/ruby/1.9.3/bin/rackup:19:in `
'

MongoDBの起動が必要らしいのでインストールして起動

# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz
# tar zvxf mongodb-linux-x86_64-2.0.2.tgz
# mv mongodb-linux-x86_64-2.0.2 /usr/local/mongodb
# mkdir /data/db
# /usr/local/mongodb/bin/mongod --fork --logpath /tmp/mongodb.log

さらに、設定ファイルapplication.ymlを作成

# cp config/application.default.yml config/application.yml
# vim config/application.yml
defaults: &defaults
  pusher:
    app_id: "pusherのid"
    key: "pusherのkey"
    secret: "pusherのsecret"

development:
  <

Pusher | Leader In Realtime TechnologiesAPI KeyとSecret Keyを登録する必要があるようなので、pusherのアカウントを作成。
app_id,key,secretを上記のapplication.ymlに記述。

サーバ起動

rackupで起動

# rackup 
[2011-12-20 11:08:44] INFO  WEBrick 1.3.1
[2011-12-20 11:08:44] INFO  ruby 1.9.3 (2011-10-30) [x86_64-linux]
[2011-12-20 11:08:44] INFO  WEBrick::HTTPServer#start: pid=7784 port=9292

9292ポートで無事Webrickが起動。

iptablesの設定変更を実施して9292ポートに接続できるようにし、ブラウザからアクセスしてみる

saveを実行しようとするとエラーが発生

SocketError - getaddrinfo: Temporary failure in name resolution:
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:762:in `initialize'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:762:in `open'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:762:in `block in connect'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:762:in `connect'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:744:in `start'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:1284:in `request'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:1307:in `send_entity'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/net/http.rb:1096:in `post'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/pusher-0.8.4/lib/pusher/request.rb:35:in `send_sync'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/pusher-0.8.4/lib/pusher/channel.rb:51:in `trigger!'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/pusher-0.8.4/lib/pusher/channel.rb:60:in `trigger'
        /var/git/kpt-it/app/controllers/posts.rb:14:in `block (2 levels) in '
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:569:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:569:in `block in route'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:51:in `'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:51:in `block (3 levels) in process_destination_path'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:788:in `route_eval'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:51:in `block (2 levels) in process_destination_path'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:51:in `catch'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:51:in `block in process_destination_path'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:25:in `instance_eval'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:25:in `process_destination_path'
        (eval):65:in `block (2 levels) in inject_root_methods'
        (eval):55:in `catch'
        (eval):55:in `block in inject_root_methods'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/http_router-0.10.2/lib/http_router/node/root.rb:92:in `'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/http_router-0.10.2/lib/http_router.rb:119:in `block in call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/http_router-0.10.2/lib/http_router.rb:119:in `catch'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/http_router-0.10.2/lib/http_router.rb:119:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:910:in `route!'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/application/routing.rb:900:in `dispatch!'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:706:in `block in call!'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:871:in `block in invoke'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:871:in `catch'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:871:in `invoke'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:706:in `call!'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:692:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sass-3.1.11/lib/sass/plugin/rack.rb:54:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/head.rb:9:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/methodoverride.rb:24:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/reloader.rb:250:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/logger.rb:306:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/showexceptions.rb:21:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/session/abstract/id.rb:195:in `context'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/session/abstract/id.rb:190:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:1334:in `block in call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:1403:in `synchronize'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:1334:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/router.rb:83:in `block in call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/router.rb:76:in `each'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core/router.rb:76:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/lint.rb:48:in `_call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/lint.rb:36:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/showexceptions.rb:24:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/commonlogger.rb:20:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/chunked.rb:41:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/content_length.rb:14:in `call'
        /usr/local/ruby/1.9.3/lib/ruby/gems/1.9.1/gems/rack-1.3.5/lib/rack/handler/webrick.rb:59:in `service'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
        /usr/local/ruby/1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

自分が試した環境だと、api.pusherapp.comの名前解決に失敗してエラーになっているので、
gemパッケージpusherのlib/pusher.rbの下記を直接IPアドレス指定。

 86   #self.host = 'api.pusherapp.com'
 87   self.host = '50.17.218.205'

これでエラーが発生しなくなった。

アプリ所感

とりあえずKeep,Problem,Tryをどんどん追加していくのには使えそう。
ただ、削除したり、グループわけとか、ユーザ管理とかそういった機能はないみたいです。
なので、個人的に使うとか、グループ全員でとりあえず貯めこむ場として使えるといいかもしれません。