ページ更新: 2010-05-09 (日) (4704日前)

(2010-02-21 新規作成)

9arrowsはプロジェクト管理ツールの1つ。WBSを作成して共有できる。AIR (Adobe) 版のクライアントも用意されている。

オープンソース (GNU GPL v3 9arrows.com | Licence) であり、ソースコードが Google Code と GitHub で公開されている。

また、ASP版 も用意されている。

目次

[編集]

最新情報 (2010-03-03 時点) #

Google Code:

  • Google Code上の最新バージョンは Version 0.9.0.2 (2008-10-07) (Support より)
  • Google CodeのSubversionリポジトリの最新リビジョンは r43 (2008-10-30)、ただしこれはタグを付けているだけ。(Issue 2 - 9arrows - 0.9.0.1のタグがありません を反映?) 実質的な最後の変更は r42 (2008-10-07)。

GitHub:

  • GitHub上では、GoogleCodeのものより新しいものがある (The 9arrows Network - GitHub)
    • restful, Rail 2.2.2, i18n, sqlite3, prototype.js 1.6.0.3
[編集]

情報源 (2010-02-09) #

[編集]

9arrows #

[編集]

9arrows.com #

[編集]

Google Group #

[編集]

Google Code #

[編集]

GitHub #

  • The 9arrows Network - GitHub
    • Google Codeよりも新しいコードがこちらにあるようだ。Rails 2.1.1対応、Rails 2.2.2対応、i18n などがなされているようだ。
[編集]

ニュースや blog の記事 #

[編集]

Ubuntu Server 9.10 (32bit) に 9arrows 0.9.0.2 をインストールしてみた #

[編集]

はじめに #

Linuxディストリビューションのパッケージを活用してRails製WebアプリをPhusion Passengerで動かすための練習として、9arrows をインストールしてみた。

現時点では、インストールしてログインして、プロジェクトを1つ作った時点で力尽きてるけど。

Ruby on Railsは数年前に調べただけだし(しかも一回も動かしてない)、Rails製アプリを使っているので、いくつか間違いがあるかも。

[編集]

作業の方針 #

  1. できるだけUbuntuのパッケージを使う
    • 理由:運用が楽になるので。(Ubuntuのアップデートやアップグレードが容易に行える)
    • 特に基本機能がほぼ変わらないものは、こちらを使う
    • RubyGems (gem install) でコンパイラが起動されることがあるので、C/C++コンパイラ一式 (build-essential) や開発用パッケージ (*-dev) やRuby用の各種bindingを適宜インストールする。
  2. でも、RubyGems でインストールできるものは、Ubuntuのパッケージを使わない
    • 理由:バージョン更新の頻度が多いので、Ubuntuのパッケージの更新が追いつかない
    • Rails はバージョン間の相違が激しいように思うので(でもChangeLogやRelease noteやチケットをまだ見つけてないので、判らないが)
      • あと、Railsには、アプリケーション内にアプリケーション専用のRailsを持つ機能があったと思うし (Redmine がそうしてたはず)。
    • Ruby1.8.7とRailsのString#chars問題の対策 の様な問題が出て、なおかつアプリケーション内で解決できなかったときに、RubyとRailsの双方をUbuntuパッケージにしてあると、パッケージを作り直す羽目になるので、面倒だ。
  3. セキュリティには凝らない
    • 理由:よく知らないものに対して、当初から凝ったセキュリティ設定を行うと、問題の切り分けが難しくなり、余分な時間が掛かるため
    • www-data に PostgreSQL の権限を与える。(別のユーザを作らない)
    • PostgreSQL のテーブルに対する権限を削らない。createdb したときのデフォルトの権限を用いる。
    • ファイル・ディレクトリへの権限はそれなりに与える。ファイルは rw- か rwx、ディレクトリは rwx にする。(与える権限をより限定するには、Railsや9arrowsの挙動をよく知る必要があるので、面倒である)
    • TripWire も AppArmor も TOMOYO Linux も SELinux も用いない。
  4. 実行時のパフォーマンス向上を求めない、パフォーマンス低下を気にしない
    • 理由:よく知らないものに対して、当初から凝った設定を行うと、問題の切り分けが難しくなり、余分な時間が掛かるため
    • LinuxやApacheやPassengerやRailsの設定変更でパフォーマンスを向上できるかも知れないけど、今回は調べない。(コネクションプーリングとか、静的コンテンツの送信経路とか、noatime とか)
    • 設定がまずくてパフォーマンスが落ちてるかも知れないけど、今回は調べない。
    • ログ出力の抑制も行わない。
[編集]

環境 #

9arrows は、http://9arrows.com/download/9arrows-all-0.9.0.2.tar.gz を用いた。

OSは、Ubuntu Server 9.10 (32bit) を用いた。(Download Ubuntu Server)

  • (2010-05-08 Ubuntu Server 10.04 32bit にアップグレードしてみた)

ほぼすべての作業を Tera Term から OpenSSH Server に接続して行っている。

Webアプリケーションサーバは、Webrick および Apache + Phusion Passenger を用いた。

データベースには、PostgreSQL および SQLite3 を用いた。

これらの環境は VMware Workstation 7.0.1/6.5.3, VMware Player 3.0.1 上に構築した。

VMware Workstation 7.0.1 上のスナップショット:

9arrows-vmware-snapshot-01.png

[編集]

まとめ #

(2010-03-03)

  • Webrickで試用したいとき: 1. → 2.
  • Apache+Passengerで動かしたいとき: 1. → 3.
[編集]

1. 9arrow の入手、Ubuntu パッケージと rails のインストール #

(2010-03-04)

Ubuntuのインストール完了直後〜

(Ubuntuのバージョンを調べる)
$ lsb_release -a

(Ubuntuパッケージの更新〜再起動(必要なら)) 
$ sudo aptitude update && sudo aptitude -y safe-upgrade && sudo aptitude autoclean
$ sudo shutdown -r now

(9arrowsのソースコードを入手)
$ wget http://9arrows.com/download/9arrows-all-0.9.0.2.tar.gz

(Ubuntuパッケージをインストールする) 
$ sudo aptitude -y install build-essential ruby ruby-dev libopenssl-ruby rubygems \
postgresql libpq-dev postfix mailx ★1-1

(gemでrailsなどをインストールする)
$ sudo gem install rails --version '= 2.1.0'
$ sudo ln -s /var/lib/gems/1.8/bin/* /usr/local/bin/   ★1-2
$ sudo gem install pg ★1-3

★1-1

  • メールサーバ(MTA)には、自分が慣れているpostfixを使っている。でもpostfixじゃなくても良いし、別途ネットワーク上にあるメールサーバを使うならここでインストールしなくても良い(してもよい)。postfixの設定は後でdpkg-reconfigureで変更できるので、当初は「ローカルのみ」を選んでも良い。
  • 9arrowsで「新規ユーザー登録」を行ったりすると、localhost の MTA 経由でメールを送信する。この文書では触れていないが、このメールを確認するために、mailx パッケージをインストールしている(mailコマンドで確認できる)。
  • メール送信方法の設定は config/environment.rb の ActionMailer の項目で行うようだ (Mailers => Rails Wiki)
    • 自分はローカルに sendmail 互換な MTA (postfixやeximやsendmail) を入れて中継させるつもりなので、この設定は修正しなかった。
  • SQLite3を用いる場合は、「postgresql libpq-dev」ではなく「libsqlite3-dev」とする。

★1-2

  • シンボリックリンクを貼るかわりに、/var/lib/gems/1.8/bin をpathに追加しても良い。

★1-3

  • pg の他には postgres や postgres-pr がある (PostgreSQL => Rails Wiki)。 pg は postgres の後継。自分は postgres 0.7.9.2008.01.28 と pg 0.9.0 を試した。どちらも、9arrowsへのログインまで行ったが、問題なし。
  • SQLite3 を用いる場合は、代わりに「sqlite3-ruby」をインストールする。
[編集]

2. 9arrows を Webrick で起動して試用 #

(2010-03-04)

試用なので、この時点では手を抜く (PostgreSQL をUNIXドメイン接続で用いる、あるいは SQLite3を用いる)

(PostgreSQLのロールを作成 (sqlite3では不要))
$ sudo -u postgres createuser --no-superuser --no-createrole --createdb `whoami` ★2-1

(9arrowsのソースコードを展開)
$ tar zxf 9arrows-all-0.9.0.2.tar.gz

(config/database.ymlを修正 ★2-2 ★2-3)
$ cd 9arrows-0.9.0.2/9arrows
$ emacs config/database.yml

(DBを初期化する)
$ rake db:create  ★2-4
$ rake db:migrate
$ rake db:fixtures:load   ★2-5

(実行権限を付与〜9arrowsをWebrickで起動して動作確認)
$ find script -type f | xargs chmod +x
$ ./script/server webrick

(動作確認。Webブラウザで http://ホスト名:3000/ にアクセスして、ログインする
ログインID「9arrows@example.com」、パスワード「9arrows」)

★2-1 USERNAMEの部分をUbuntuの自分ののユーザ名に置き換えること。

★2-2 PostgreSQL をUNIXドメイン接続で用いる場合の config/database.yml の修正差分 (developmentを修正):

  • usernameをUbuntuのログインユーザー名にする。USERNAMEの部分は自分のユーザ名に置き換えること。
  • databaseを「9」→「nine」にする。これを行わないと、rake db:create でデータベースを自動作成できないので。
  • host と password の行は消す。
    • host を消すと、PostgreSQL への接続にUNIXドメインソケットが使われる。 postgresql パッケージでは、/etc/postgresql/8.4/main/pg_hba.conf で UbuntuのユーザはパスワードなしでPostgreSQLに接続できるよう設定されているので、パスワードも不要になる。よってこちらの行も消去する。
diff -r a2ffe4c9a9b9 config/database.yml
--- a/config/database.yml       Tue Mar 02 21:09:04 2010 +0900
+++ b/config/database.yml       Tue Mar 02 21:17:16 2010 +0900
@@ -13,10 +13,8 @@
 #   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
 development:
  adapter: postgresql
-  database: 9arrows_development
-  username: postgres
-  password: postgres
-  host: localhost
+  database: ninearrows_development
+  username: USERNAME

 # Warning: The database defined as 'test' will be erased and
 # re-generated from your development database when you run 'rake'.

★2-3 SQLite3 を用いる場合の config/database.yml の修正差分 (developmentを修正):

  • adapterをsqlite3に修正する。
  • databaseを「9」→「nine」にする。これを行わないと、rake db:create でデータベースを自動作成できないので。
  • username, password, host の行は消す。
diff -r dff1eebb4085 9arrows/config/database.yml
--- a/9arrows/config/database.yml       Thu Mar 04 21:19:34 2010 +0900
+++ b/9arrows/config/database.yml       Thu Mar 04 21:27:10 2010 +0900
@@ -12,11 +12,8 @@
 # And be sure to use new-style password hashing:
 #   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
 development:
-  adapter: postgresql
-  database: 9arrows_development
-  username: postgres
-  password: postgres
-  host: localhost
+  adapter: sqlite3
+  database: db/ninearrows_development.db

 # Warning: The database defined as 'test' will be erased and
 # re-generated from your development database when you run 'rake'.

★2-4 やり直したいときは、rake db:drop してから、rake db:create する

★2-5 初期データの一部(アカウント1つ、プロジェクトの雛形、ブラウザ上に表示するメッセージ) を投入しているようだ。 (trunk - 9arrows#trunk/test/fixtures)

[編集]

3. Apache + Passenger で動作させる #

http://ホスト名/9arrows で動かすための手順

(UbuntuパッケージでApacheとPassengerをインストールする)
$ sudo aptitude -y install apache2 libapache2-mod-passenger

(9arrowsを /var/rails/9arrows にコピーする (管理しやすい場所にコピーする))
$ tar zxf 9arrows-all-0.9.0.2.tar.gz
$ sudo mkdir -p /var/rails
$ sudo cp -a 9arrows-0.9.0.2/9arrows /var/rails/

(PostgreSQLにwww-dataユーザを追加。パスワードを設定して、後で config/database.yml に記載する)
$ sudo -u postgres createuser --no-superuser --no-createrole --createdb --pwprompt www-data

(/var/rails/9arrows/config/database.yml を修正する ★3-1)
$ emacs /var/rails/9arrows/config/database.yml

(パーミッションと所有者を変更する)
$ sudo find /var/rails/9arrows/* -type f | xargs sudo chmod 600
$ sudo find /var/rails/9arrows/* -type d | xargs sudo chmod 700
$ sudo chmod 700 -R /var/rails/9arrows/script
$ sudo chown -R www-data:www-data /var/rails/9arrows

(DBを初期化する)
$ cd /var/rails/9arrows/
$ sudo -u www-data rake RAILS_ENV=production db:create  ★3-2
$ sudo -u www-data rake RAILS_ENV=production db:migrate
$ sudo -u www-data rake RAILS_ENV=production db:fixtures:load

(Apacheに設定を追加して、Apacheを再起動する)
$ sudo ln -s /var/rails/9arrows/public /var/www/9arrows
$ (/etc/apache2/sites-available/9arrows を作成する ★3-3)
$ sudo a2ensite 9arrows
$ sudo apache2ctl configtest
$ sudo /etc/init.d/apache2 restart

(動作確認。Webブラウザで http://ホスト名/9arrows/ にアクセスして、ログインする
ログインID「9arrows@example.com」、パスワード「9arrows」)

★3-1 /var/rails/9arrows/config/database.yml の修正個所 (productionを修正、PASSWORD はcreateuserで設定した物を使う):

  • 今回はTCP/IPで接続している (hostを指定)。UNIXドメインソケットでも繋がるだろうけど。
    --- 9arrows-0.9.0.2/9arrows/config/database.yml   2008-09-08 21:59:34.000000000 +0900
    +++ /var/rails/9arrows/config/database.yml      2010-02-26 20:39:01.912871883 +0900
    @@ -30,7 +30,7 @@
    
     production:
       adapter: postgresql
    -  database: 9arrows_production
    -  username: postgres
    -  password: postgres
    +  database: ninearrows_production
    +  username: www-data
    +  password: PASSWORD
       host: localhost

★3-2

  • やり直したいときは、rake db:drop してから、rake db:create する
  • Phusion Passenger で稼働させるときは、デフォルト環境は production になる

★3-3 /etc/apache2/sites-available/9arrows の内容

RailsBaseURI /9arrows
<Directory /var/www/9arrows>
  Options -MultiViews
</Directory>
[編集]

インストール時のメモ #

[編集]

Ubuntu 9.10 server のインストール #

Download Ubuntu Server | Ubuntu で Ubuntu 9.10 server 32bit版をダウンロードして、VMware Workstation 7.0.1 (ソフト/VMware) でVMを作ってインストールした。

キーボードは「Generic」の105 (Intl) を選択したと思う。

インストール中の「パッケージ選択」で「Open SSH Server」をインストールした。 (あとで aptitude install openssh-server してもよいが)

インストール完了後にコンソールからログインして ifconfig コマンドでIPアドレスを調べて、以後はsshで接続して作業を行う(作業を記録しやすくするため)

$ LANG= ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:c4:d2:07
          inet addr:192.168.65.131  Bcast:192.168.65.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fec4:d207/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
...
$ logout
[編集]

Ubuntu 9.10 のインストール済みパッケージの更新 #

インストール済みパッケージを更新する。カーネルも更新されるので、再起動する:

$ sudo aptitude update && sudo aptitude safe-upgrade && sudo aptitude autoclean
[sudo] password for USERNAME:
...
取得:10 http://jp.archive.ubuntu.com karmic-updates/multiverse Sources [3,820B]
245kB を 2min 23s 秒でダウンロードしました (1,704B/s)
...
以下の新規パッケージがインストールされます:
  libdns53{a} linux-headers-2.6.31-19{a} linux-headers-2.6.31-19-generic-pae{a}
  linux-image-2.6.31-19-generic-pae{a}
以下のパッケージは『削除』されます:
  linux-headers-2.6.31-14{u} linux-headers-2.6.31-14-generic-pae{u}
以下のパッケージは更新されます:
  adduser apparmor apparmor-utils apport bind9-host cpp-4.4 dhcp3-client dhcp3-common
  dnsutils fuse-utils gcc-4.4-base gzip initscripts landscape-common libapparmor-perl
  libapparmor1 libbind9-50 libc-bin libc6 libc6-i686 libdns50 libexpat1 libfuse2
  libgcc1 libglib2.0-0 libglib2.0-data libgssapi-krb5-2 libhtml-parser-perl libisc50
  libisccc50 libisccfg50 libk5crypto3 libkrb5-3 libkrb5support0 liblwres50
  libpython2.6 libssl0.9.8 libstdc++6 libudev0 libxml2 linux-firmware
  linux-generic-pae linux-headers-generic-pae linux-image-generic-pae ntpdate openssl
  python python-apport python-minimal python-problem-report python2.6
  python2.6-minimal rsyslog sysv-rc sysvinit-utils tzdata udev update-manager-core
  upstart x11-common
60 個のパッケージを更新、 4 個を新たにインストール、 2 個を削除予定、0 個が更新されていな い。
71.2MB のアーカイブを取得する必要があります。 展開後に 89.8MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y

....
$ sudo shutdown -r now
...
[編集]

build-essential パッケージのインストール #

gemのインストール中にCコンパイラが起動されることがあるため、最低限のコンパイル環境をインストールする。

$ sudo aptitude install build-essential
[sudo] password for USERNAME:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます
パッケージの状態を初期化しています... 完了
以下の新規パッケージがインストールされます:
  binutils{a} build-essential dpkg-dev{a} fakeroot{a} g++{a} g++-4.4{a} gcc{a}
  gcc-4.4{a} libc-dev-bin{a} libc6-dev{a} libgomp1{a} libstdc++6-4.4-dev{a}
  linux-libc-dev{a}
0 個のパッケージを更新、 13 個を新たにインストール、 0 個を削除予定、0 個が更新されていな い。
17.2MB のアーカイブを取得する必要があります。 展開後に 61.6MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...
[編集]

(オプション) VMware Tools のインストール #

VMware上にUbuntuをインストールした場合、性能向上のためにVMware Toolsをインストールすると良い。

VMware tools はどの時点でインストールしても良い。

最初にbuild-essentialとlinux-headers-* をインストールする(でも、どちらも既にインストールされているのだが):

$ sudo aptitude install build-essential linux-headers-`uname -r`
...
インストール・削除・更新されるパッケージがありません。
0 個のパッケージを更新、 0 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
0B のアーカイブを取得する必要があります。 展開後に 0B のディスク領域が新たに消費されます。
...

VMware WorkstationやPlayerのメニューで「VMware toolsのインストール」を選ぶ。

最後に再起動する (initrd が更新されているので、それの動作確認を行うため)

$ sudo -i
# mount /cdrom
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
# tar zxf /cdrom/VMware-tools-8.1.4-227600.tar.gz
# umount /cdrom
# cd vmware-tools-distrib
# ./vmware-install.pl -d
...
# shutdown -r now
[編集]

(オプション) mercurial, etckeeper パッケージのインストール #

9arrows のファイルの変更管理のために mercurial を、/etc 以下のファイルの変更管理のために etckeeper をインストールする。

$ sudo aptitude install mercurial etckeeper
...
以下の新規パッケージがインストールされます:
  etckeeper mercurial mercurial-common{a}
0 個のパッケージを更新、 3 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
1,156kB のアーカイブを取得する必要があります。 展開後に 5,231kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...

$ sudo vi /etc/etckeeper/etckeeper.conf  (Mercurial (=hg) を使うように設定する)
$ cd /etc
$ sudo etckeeper init
$ sudo etckeeper commit
[編集]

postgresql, libpq-dev パッケージのインストール #

$ sudo aptitude install postgresql libpq-dev
...
以下の新規パッケージがインストールされます:
  comerr-dev{a} libgssrpc4{a} libkadm5clnt6{a} libkadm5srv6{a} libkdb5-4{a} libkrb5-dev{a} libpq-dev
  libpq5{a} libreadline5{a} libssl-dev{a} postgresql postgresql-8.4{a} postgresql-client-8.4{a}
  postgresql-client-common{a} postgresql-common{a} ssl-cert{a} zlib1g-dev{a}
0 個のパッケージを更新、 17 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
7,780kB のアーカイブを取得する必要があります。 展開後に 27.4MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
... 
postgresql-8.4 (8.4.2-0ubuntu9.10) を設定しています ...
Creating new cluster (configuration: /etc/postgresql/8.4/main, data: /var/lib/postgresql/8.4/main)...
Moving configuration file /var/lib/postgresql/8.4/main/postgresql.conf to /etc/postgresql/8.4/main...
Moving configuration file /var/lib/postgresql/8.4/main/pg_hba.conf to /etc/postgresql/8.4/main...
Moving configuration file /var/lib/postgresql/8.4/main/pg_ident.conf to /etc/postgresql/8.4/main...
Configuring postgresql.conf to use port 5432...
update-alternatives: using /usr/share/postgresql/8.4/man/man1/postmaster.1.gz to provide 
/usr/share/man/man1/postmaster.1.gz
(postmaster.1.gz) in auto mode.
 * Starting PostgreSQL 8.4 database server
   ...done.
...

ポート番号を確認

$ grep -R -i port /etc/postgresql
grep: /etc/postgresql/8.4/main/pg_ident.conf: Permission denied
/etc/postgresql/8.4/main/postgresql.conf:port = 5432                       # (change requires restart)
/etc/postgresql/8.4/main/postgresql.conf:                                  # supported by the operating system:
/etc/postgresql/8.4/main/postgresql.conf:# ERROR REPORTING AND LOGGING
/etc/postgresql/8.4/main/postgresql.conf:                                  #   %r = remote host and port
grep: /etc/postgresql/8.4/main/pg_hba.conf: Permission denied

$ netstat -an | grep :5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:5432                :::*

$ sudo lsof -i:5432
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
postgres 3492 postgres    3u  IPv6  10457      0t0  TCP localhost:postgresql (LISTEN)
postgres 3492 postgres    6u  IPv4  10458      0t0  TCP localhost:postgresql (LISTEN)

$ sudo fuser -n tcp 5432
5432/tcp:             3492

$ ps -p 3492
  PID TTY          TIME CMD
 3492 ?        00:00:00 postgres

マニュアルを読む:

$ less /usr/share/doc/postgresql-8.4/README.Debian.gz

psqlで接続してみる。ただしUNIXDOMAIN経由(IP経由だとパスワードが必要... /etc/postgresql/8.4/main/pg_hba.conf を参照のこと):

$ sudo -u postgres -i
postgres@ubuntu910s:~$ psql
psql (8.4.2)
"help" でヘルプを表示します.

postgres=# \q
postgres@ubuntu910s:~$ logout
$
[編集]

ruby, ruby-dev, libopenssl-ruby パッケージのインストール #

ruby, ruby-dev をインストールする:

$ sudo aptitude install ruby ruby-dev
...
以下の新規パッケージがインストールされます:
  libruby1.8{a} ruby ruby-dev ruby1.8{a} ruby1.8-dev{a}
0 個のパッケージを更新、 5 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
2,075kB のアーカイブを取得する必要があります。 展開後に 7,979kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...

$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]

libruby-openssl をインストールする:

$ ruby -r openssl -e ""
ruby: no such file to load -- openssl (LoadError)
 
$ sudo aptitude install libopenssl-ruby
...
以下の新規パッケージがインストールされます:
  libopenssl-ruby libopenssl-ruby1.8{a}
0 個のパッケージを更新、 2 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
127kB のアーカイブを取得する必要があります。 展開後に 569kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
... 

$ ruby -r openssl -e ""
$
[編集]

rubygems パッケージのインストール #

$ sudo aptitude install rubygems
...
以下の新規パッケージがインストールされます:
  irb1.8{a} libreadline-ruby1.8{a} rdoc1.8{a} rubygems rubygems1.8{a}
0 個のパッケージを更新、 5 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
409kB のアーカイブを取得する必要があります。 展開後に 2,163kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...
[編集]

9arrows の入手 #

9arrows をダウンロード:

$ wget http://9arrows.com/download/9arrows-all-0.9.0.2.tar.gz
[編集]

PostgreSQL のロールを作成、動作確認 #

PostgreSQLに仮のユーザ(=Ubuntuのログインユーザ名を用いる、以下USERNAMEと称す)とDBを用意する。

$ sudo -u postgres -i
postgres@ubuntu910s:~$ createuser --no-superuser --no-createrole --createdb --pwprompt USERNAME
新しいロールのパスワード:
もう一度入力してください:
postgres@ubuntu910s:~$ logout

試しにDBを作成して、TCP/IP経由で接続できること、パスワードが正しいことを確かめる。

$ createdb sampledb

$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 sampledb  | USERNAME | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(4 行)

$ psql -h localhost -U USERNAME sampledb
ユーザ USERNAME のパスワード:
psql (8.4.2)
SSL 接続 (暗号化方式: DHE-RSA-AES256-SHA, ビット長: 256)
"help" でヘルプを表示します.

sampledb=> \q

$ dropdb sampledb
[編集]

rails, rake, postgres を gem でインストール #

(注意:当初は試行錯誤のために一般ユーザで gem install して、~/.gems にインストールされた物を使っていた(不要になったら簡単に消せる)。またUbuntuパッケージのrake,rdoc,riをインストールしてみたりもした。これらのことは、この文書には記載していない)

RubyGems:

Rails:

ActiveRecordアダプタ:

9arrowsが要求するRailsのバージョンを調べる:

$ cd 9arrows-all-0.9.0.2/9arrows
$ grep VER config/environment.rb
RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION

rails をインストールする。rake も同時にインストールされる。所要時間は5分程度:

$ sudo -i
# gem install rails --version '= 2.1.0'
Successfully installed rake-0.8.7
Successfully installed activesupport-2.1.0
Successfully installed activerecord-2.1.0
Successfully installed actionpack-2.1.0
Successfully installed actionmailer-2.1.0
Successfully installed activeresource-2.1.0
Successfully installed rails-2.1.0
7 gems installed
Installing ri documentation for rake-0.8.7...
Installing ri documentation for activesupport-2.1.0...
Installing ri documentation for activerecord-2.1.0...
Installing ri documentation for actionpack-2.1.0...
Installing ri documentation for actionmailer-2.1.0...
Installing ri documentation for activeresource-2.1.0...
Installing ri documentation for rails-2.1.0...
Installing RDoc documentation for rake-0.8.7...
Installing RDoc documentation for activesupport-2.1.0...
Installing RDoc documentation for activerecord-2.1.0...
Installing RDoc documentation for actionpack-2.1.0...
Installing RDoc documentation for actionmailer-2.1.0...
Installing RDoc documentation for activeresource-2.1.0...
Installing RDoc documentation for rails-2.1.0...

# gem list

*** LOCAL GEMS ***

actionmailer (2.1.0)
actionpack (2.1.0)
activerecord (2.1.0)
activeresource (2.1.0)
activesupport (2.1.0)
rails (2.1.0)
rake (0.8.7)


# ls /var/lib/gems/1.8/bin
rails*  rake*


# ls -R ~/.gem
/root/.gem:
ruby/  specs/

/root/.gem/ruby:
1.8/

/root/.gem/ruby/1.8:
cache/  doc/  gems/  specifications/

/root/.gem/ruby/1.8/cache:

/root/.gem/ruby/1.8/doc:

/root/.gem/ruby/1.8/gems:

/root/.gem/ruby/1.8/specifications:

/root/.gem/specs:
gems.rubyforge.org%80/

/root/.gem/specs/gems.rubyforge.org%80:
latest_specs.4.8  quick/  specs.4.8

/root/.gem/specs/gems.rubyforge.org%80/quick:
Marshal.4.8/

/root/.gem/specs/gems.rubyforge.org%80/quick/Marshal.4.8:
actionmailer-2.1.0.gemspec  activerecord-2.1.0.gemspec    activesupport-2.1.0.gemspec  rake-0.8.7.gemspec
actionpack-2.1.0.gemspec    activeresource-2.1.0.gemspec  rails-2.1.0.gemspec

postgres gemををインストールする (より新しいらしい pg や posgresql-pr のほうがよいだろうけど、とりあえずはこれで):

# gem install postgres
Building native extensions.  This could take a while...
Successfully installed postgres-0.7.9.2008.01.28
1 gem installed
Installing ri documentation for postgres-0.7.9.2008.01.28...
Installing RDoc documentation for postgres-0.7.9.2008.01.28...

# gem list postgres

*** LOCAL GEMS ***

postgres (0.7.9.2008.01.28)

# gem list --details postgres

*** LOCAL GEMS ***

postgres (0.7.9.2008.01.28)
    Authors: Yukihiro Matsumoto, Eiji Matsumoto, Noboru Saitou, Dave
    Lee, Jeff Davis
    Rubyforge: http://rubyforge.org/projects/ruby-pg
    Homepage: http://rubyforge.org/projects/ruby-pg
    Installed at: /var/lib/gems/1.8

    Ruby extension library providing an API to PostgreSQL

# logout

rakeとrailsにパスを通すために、シンボリックリンクを作成する:

$ which rake

$ which rails

$ sudo ln -s /var/lib/gems/1.8/bin/rails /usr/local/bin/
$ sudo ln -s /var/lib/gems/1.8/bin/rake /usr/local/bin/

$ which rake
/usr/local/bin/rake

$ which rails
/usr/local/bin/rails

Railsのバージョンを確認:

$ rails -v
Rails 2.1.0

2010-02-28 補足: pg や postgres-pr の情報を得るために、~/.gem/ にインストールしてみた:

$ gem install postgres-pr
WARNING:  Installing to ~/.gem since /var/lib/gems/1.8 and
          /var/lib/gems/1.8/bin aren't both writable.
WARNING:  You don't have /home/hamatani/.gem/ruby/1.8/bin in your PATH,
          gem executables will not run.
Successfully installed postgres-pr-0.6.3
1 gem installed
Installing ri documentation for postgres-pr-0.6.3...
Installing RDoc documentation for postgres-pr-0.6.3...

$ gem install pg
WARNING:  Installing to ~/.gem since /var/lib/gems/1.8 and
          /var/lib/gems/1.8/bin aren't both writable.
WARNING:  You don't have /home/hamatani/.gem/ruby/1.8/bin in your PATH,
          gem executables will not run.
Building native extensions.  This could take a while...
Successfully installed pg-0.9.0
1 gem installed
Installing ri documentation for pg-0.9.0...
Installing RDoc documentation for pg-0.9.0...

2010-03-01 補足:gem「postgres」をアンインストールして、「pg」をインストールしてみた:

$ sudo gem uninstall postgres
Successfully uninstalled postgres-0.7.9.2008.01.28

$ sudo gem install pg
Building native extensions.  This could take a while...
Successfully installed pg-0.9.0
1 gem installed
Installing ri documentation for pg-0.9.0...
Installing RDoc documentation for pg-0.9.0...
$ sudo gem list

*** LOCAL GEMS ***

actionmailer (2.1.0)
actionpack (2.1.0)
activerecord (2.1.0)
activeresource (2.1.0)
activesupport (2.1.0)
pg (0.9.0)
rails (2.1.0)
rake (0.8.7)
$ sudo gem list --detail

*** LOCAL GEMS ***

actionmailer (2.1.0)
    Author: David Heinemeier Hansson
    Rubyforge: http://rubyforge.org/projects/actionmailer
    Homepage: http://www.rubyonrails.org
    Installed at: /var/lib/gems/1.8

    Service layer for easy email delivery and testing.

actionpack (2.1.0)
    Author: David Heinemeier Hansson
    Rubyforge: http://rubyforge.org/projects/actionpack
    Homepage: http://www.rubyonrails.org
    Installed at: /var/lib/gems/1.8

    Web-flow and rendering framework putting the VC in MVC.

activerecord (2.1.0)
    Author: David Heinemeier Hansson
    Rubyforge: http://rubyforge.org/projects/activerecord
    Homepage: http://www.rubyonrails.org
    Installed at: /var/lib/gems/1.8

    Implements the ActiveRecord pattern for ORM.

activeresource (2.1.0)
    Author: David Heinemeier Hansson
    Rubyforge: http://rubyforge.org/projects/activeresource
    Homepage: http://www.rubyonrails.org
    Installed at: /var/lib/gems/1.8

    Think Active Record for web resources.

activesupport (2.1.0)
    Author: David Heinemeier Hansson
    Rubyforge: http://rubyforge.org/projects/activesupport
    Homepage: http://www.rubyonrails.org
    Installed at: /var/lib/gems/1.8

    Support and utility classes used by the Rails framework.

pg (0.9.0)
    Author: Michael Granger
    Homepage: http://bitbucket.org/ged/ruby-pg/
    Installed at: /var/lib/gems/1.8

    A Ruby interface to the PostgreSQL RDBMS

rails (2.1.0)
    Author: David Heinemeier Hansson
    Rubyforge: http://rubyforge.org/projects/rails
    Homepage: http://www.rubyonrails.org
    Installed at: /var/lib/gems/1.8

    Web-application framework with template engine, control-flow layer,
    and ORM.

rake (0.8.7)
    Author: Jim Weirich
    Rubyforge: http://rubyforge.org/projects/rake
    Homepage: http://rake.rubyforge.org
    Installed at: /var/lib/gems/1.8

    Ruby based make-like utility.

2010-03-01 補足:rakeのタスク一覧

$ rake -T
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)
rake db:abort_if_pending_migrations  # Raises an error if there are pending migrations
rake db:charset                      # Retrieves the charset for the current environment's database
rake db:collation                    # Retrieves the collation for the current environment's database
rake db:create                       # Create the database defined in config/database.yml for the current...
rake db:create:all                   # Create all the local databases defined in config/database.yml
rake db:drop                         # Drops the database for the current RAILS_ENV
rake db:drop:all                     # Drops all the local databases defined in config/database.yml
rake db:fixtures:identify            # Search for a fixture given a LABEL or ID.
rake db:fixtures:load                # Load fixtures into the current environment's database.
rake db:migrate                      # Migrate the database through scripts in db/migrate.
rake db:migrate:down                 # Runs the "down" for a given migration VERSION.
rake db:migrate:redo                 # Rollbacks the database one migration and re migrate up.
rake db:migrate:reset                # Resets your database using your migrations for the current environ...
rake db:migrate:up                   # Runs the "up" for a given migration VERSION.
rake db:reset                        # Drops and recreates the database from db/schema.rb for the current...
rake db:rollback                     # Rolls the schema back to the previous version.
rake db:schema:dump                  # Create a db/schema.rb file that can be portably used against any D...
rake db:schema:load                  # Load a schema.rb file into the database
rake db:sessions:clear               # Clear the sessions table
rake db:sessions:create              # Creates a sessions migration for use with CGI::Session::ActiveReco...
rake db:structure:dump               # Dump the database structure to a SQL file
rake db:test:clone                   # Recreate the test database from the current environment's database...
rake db:test:clone_structure         # Recreate the test databases from the development structure
rake db:test:prepare                 # Prepare the test database and load the schema
rake db:test:purge                   # Empty the test database
rake db:version                      # Retrieves the current schema version number
rake doc:app                         # Build the RDOC HTML Files
rake doc:clobber_app                 # Remove rdoc products
rake doc:clobber_plugins             # Remove plugin documentation
rake doc:clobber_rails               # Remove rdoc products
rake doc:plugins                     # Generate documentation for all installed plugins
rake doc:rails                       # Build the RDOC HTML Files
rake doc:reapp                       # Force a rebuild of the RDOC files
rake doc:rerails                     # Force a rebuild of the RDOC files
rake gems                            # List the gems that this rails application depends on
rake gems:build                      # Build any native extensions for unpacked gems
rake gems:install                    # Installs all required gems for this application.
rake gems:unpack                     # Unpacks the specified gem into vendor/gems.
rake gems:unpack:dependencies        # Unpacks the specified gems and its dependencies into vendor/gems
rake log:clear                       # Truncates all *.log files in log/ to zero bytes
rake notes                           # Enumerate all annotations
rake notes:fixme                     # Enumerate all FIXME annotations
rake notes:optimize                  # Enumerate all OPTIMIZE annotations
rake notes:todo                      # Enumerate all TODO annotations
rake rails:freeze:edge               # Lock to latest Edge Rails, for a specific release use RELEASE=1.2.0
rake rails:freeze:gems               # Lock this application to the current gems (by unpacking them into ...
rake rails:unfreeze                  # Unlock this application from freeze of gems or edge and return to ...
rake rails:update                    # Update both configs, scripts and public/javascripts from Rails
rake rails:update:configs            # Update config/boot.rb from your current rails install
rake rails:update:javascripts        # Update your javascripts from your current rails install
rake rails:update:scripts            # Add new scripts to the application script/ directory
rake routes                          # Print out all defined routes in match order, with names.
rake secret                          # Generate a crytographically secure secret key.
rake stats                           # Report code statistics (KLOCs, etc) from the application
rake test                            # Run all unit, functional and integration tests
rake test:functionals                # Run tests for functionalsdb:test:prepare / Run the functional test...
rake test:integration                # Run tests for integrationdb:test:prepare / Run the integration tes...
rake test:plugins                    # Run tests for pluginsenvironment / Run the plugin tests in vendor/...
rake test:recent                     # Run tests for recentdb:test:prepare / Test recent changes
rake test:uncommitted                # Run tests for uncommitteddb:test:prepare / Test changes since last...
rake test:units                      # Run tests for unitsdb:test:prepare / Run the unit tests in test/unit
rake time:zones:all                  # Displays names of all time zones recognized by the Rails TimeZone ...
rake time:zones:local                # Displays names of time zones recognized by the Rails TimeZone clas...
rake time:zones:us                   # Displays names of US time zones recognized by the Rails TimeZone c...
rake tmp:cache:clear                 # Clears all files and directories in tmp/cache
rake tmp:clear                       # Clear session, cache, and socket files from tmp/
rake tmp:create                      # Creates tmp directories for sessions, cache, and sockets
rake tmp:pids:clear                  # Clears all files in tmp/pids
rake tmp:sessions:clear              # Clears all files in tmp/sessions
rake tmp:sockets:clear               # Clears all files in tmp/sockets
[編集]

9arrows のデータベース接続設定を修正 #

9arrowsを展開:

$ tar zxf 9arrows-all-0.9.0.2.tar.gz
$ cd 9arrows-all-0.9.0.2/9arrows

(オプション)Mercurialで現状を記録:

$ hg init
$ hg commit -A -m "http://9arrows.com/download/9arrows-all-0.9.0.2.tar.gz/9arrows"

9arrowsのデータベース接続設定 (config/database.yml) を修正する:

$ (config/database.yml を PostgreSQL に行った設定に従って修正する)

修正個所を確認:

$ hg diff
diff -r faa84e4f9d8c config/database.yml
--- a/config/database.yml       Tue Feb 22 21:20:40 2010 +0900
+++ b/config/database.yml       Tue Feb 22 22:49:59 2010 +0900
@@ -13,9 +13,9 @@
 #   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
 development:
   adapter: postgresql
-  database: 9arrows_development
-  username: postgres
-  password: postgres
+  database: ninearrows_development
+  username: USERNAME
+  password: 9arrows
   host: localhost

 # Warning: The database defined as 'test' will be erased and

DBを作ってみる。エラー無し。警告は出てるけど、この作業とは無関係なので無視する(自分で原因を取り除くことも出来るけど):

$ rake db:create
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************


$

「database: 9arrows_development」を修正する理由について。 デフォルトのまま (9arrows_production) だと、rake db:create 実行時に以下のようにPostgreSQL で構文エラーが発生するため:

$ rake db:create
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)
PGError: ERROR:  "9"またはその近辺で構文エラー
LINE 1: CREATE DATABASE 9arrows_production ENCODING = 'utf8'
                        ^
: CREATE DATABASE 9arrows_production ENCODING = 'utf8'
/var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_reco
[編集]

rake db:migrate, rake db:fixtures:load の実行 #

README-ja - 9arrows にしたがい、rake db:migrate と rake db:fixtures:load を実行する:

$ cd 9arrows-0.9.0.2/9arrows

$ rake db:migrate
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

== 1 CreateMstUsers: migrating ================================================
-- create_table(:mst_users)
NOTICE:  CREATE TABLEはシリアル列"mst_users.id"用に暗黙的なシーケンス"mst_users_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_users"に暗黙的なインデックス"mst_users_pkey"を作成します
   -> 0.2259s
== 1 CreateMstUsers: migrated (0.2261s) =======================================

== 2 CreateMstMessages: migrating =============================================
-- create_table(:mst_messages)
NOTICE:  CREATE TABLEはシリアル列"mst_messages.id"用に暗黙的なシーケンス"mst_messages_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_messages"に暗黙的なインデックス"mst_messages_pkey"を作成し
ます
   -> 0.0420s
== 2 CreateMstMessages: migrated (0.0422s) ====================================

== 3 CreateMstTemplates: migrating ============================================
-- create_table(:mst_templates)
NOTICE:  CREATE TABLEはシリアル列"mst_templates.id"用に暗黙的なシーケンス"mst_templates_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_templates"に暗黙的なインデックス"mst_templates_pkey"を作成
します
   -> 0.0650s
== 3 CreateMstTemplates: migrated (0.0652s) ===================================

== 4 CreateMstCompositions: migrating =========================================
-- create_table(:mst_compositions)
NOTICE:  CREATE TABLEはシリアル列"mst_compositions.id"用に暗黙的なシーケンス"mst_compositions_id_seq"を作成
します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_compositions"に暗黙的なインデックス"mst_compositions_pkey"
を作成します
   -> 0.0352s
== 4 CreateMstCompositions: migrated (0.0354s) ================================

== 5 CreateMstTptasks: migrating ==============================================
-- create_table(:mst_tptasks)
NOTICE:  CREATE TABLEはシリアル列"mst_tptasks.id"用に暗黙的なシーケンス"mst_tptasks_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_tptasks"に暗黙的なインデックス"mst_tptasks_pkey"を作成しま
す
   -> 0.0317s
== 5 CreateMstTptasks: migrated (0.0319s) =====================================

== 6 CreateMstTpevents: migrating =============================================
-- create_table(:mst_tpevents)
NOTICE:  CREATE TABLEはシリアル列"mst_tpevents.id"用に暗黙的なシーケンス"mst_tpevents_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_tpevents"に暗黙的なインデックス"mst_tpevents_pkey"を作成
します
   -> 0.0407s
== 6 CreateMstTpevents: migrated (0.0408s) ====================================

== 7 CreateMstTpmilestones: migrating =========================================
-- create_table(:mst_tpmilestones)
NOTICE:  CREATE TABLEはシリアル列"mst_tpmilestones.id"用に暗黙的なシーケンス"mst_tpmilestones_id_seq"を作成
します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"mst_tpmilestones"に暗黙的なインデックス"mst_tpmilestones_pkey"
を作成します
   -> 0.0082s
== 7 CreateMstTpmilestones: migrated (0.0084s) ================================

== 8 CreateDatProjects: migrating =============================================
-- create_table(:dat_projects)
NOTICE:  CREATE TABLEはシリアル列"dat_projects.id"用に暗黙的なシーケンス"dat_projects_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_projects"に暗黙的なインデックス"dat_projects_pkey"を作成し
ます
   -> 0.0485s
== 8 CreateDatProjects: migrated (0.0487s) ====================================

== 9 CreateDatProjectusers: migrating =========================================
-- create_table(:dat_projectusers)
NOTICE:  CREATE TABLEはシリアル列"dat_projectusers.id"用に暗黙的なシーケンス"dat_projectusers_id_seq"を作成し
ます。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_projectusers"に暗黙的なインデックス"dat_projectusers_pkey"
を作成します
   -> 0.0081s
== 9 CreateDatProjectusers: migrated (0.0083s) ================================

== 10 CreateDatProjectcomps: migrating ========================================
-- create_table(:dat_projectcomps)
NOTICE:  CREATE TABLEはシリアル列"dat_projectcomps.id"用に暗黙的なシーケンス"dat_projectcomps_id_seq"を作成し
ます。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_projectcomps"に暗黙的なインデックス"dat_projectcomps_pkey"
を作成します
   -> 0.0412s
== 10 CreateDatProjectcomps: migrated (0.0413s) ===============================

== 11 CreateDatProjectlogs: migrating =========================================
-- create_table(:dat_projectlogs)
NOTICE:  CREATE TABLEはシリアル列"dat_projectlogs.id"用に暗黙的なシーケンス"dat_projectlogs_id_seq"を作成しま
す。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_projectlogs"に暗黙的なインデックス"dat_projectlogs_pkey"を
作成します
   -> 0.0223s
== 11 CreateDatProjectlogs: migrated (0.0225s) ================================

== 12 CreateDatTasks: migrating ===============================================
-- create_table(:dat_tasks)
NOTICE:  CREATE TABLEはシリアル列"dat_tasks.id"用に暗黙的なシーケンス"dat_tasks_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_tasks"に暗黙的なインデックス"dat_tasks_pkey"を作成します
   -> 0.0365s
== 12 CreateDatTasks: migrated (0.0367s) ======================================

== 13 CreateDatTaskusers: migrating ===========================================
-- create_table(:dat_taskusers)
NOTICE:  CREATE TABLEはシリアル列"dat_taskusers.id"用に暗黙的なシーケンス"dat_taskusers_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_taskusers"に暗黙的なインデックス"dat_taskusers_pkey"を作成し
ます
   -> 0.0143s
== 13 CreateDatTaskusers: migrated (0.0144s) ==================================

== 14 CreateDatTaskfiles: migrating ===========================================
-- create_table(:dat_taskfiles)
NOTICE:  CREATE TABLEはシリアル列"dat_taskfiles.id"用に暗黙的なシーケンス"dat_taskfiles_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_taskfiles"に暗黙的なインデックス"dat_taskfiles_pkey"を作成し
ます
   -> 0.0200s
== 14 CreateDatTaskfiles: migrated (0.0201s) ==================================

== 15 CreateDatTaskhistories: migrating =======================================
-- create_table(:dat_taskhistories)
NOTICE:  CREATE TABLEはシリアル列"dat_taskhistories.id"用に暗黙的なシーケンス"dat_taskhistories_id_seq"を作成
します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_taskhistories"に暗黙的なインデックス"dat_taskhistories_pkey"
を作成します
   -> 0.0184s
== 15 CreateDatTaskhistories: migrated (0.0185s) ==============================

== 16 CreateDatTaskcmts: migrating ============================================
-- create_table(:dat_taskcmts)
NOTICE:  CREATE TABLEはシリアル列"dat_taskcmts.id"用に暗黙的なシーケンス"dat_taskcmts_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_taskcmts"に暗黙的なインデックス"dat_taskcmts_pkey"を作成しま
す
   -> 0.0158s
== 16 CreateDatTaskcmts: migrated (0.0160s) ===================================

== 17 CreateDatEvents: migrating ==============================================
-- create_table(:dat_events)
NOTICE:  CREATE TABLEはシリアル列"dat_events.id"用に暗黙的なシーケンス"dat_events_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_events"に暗黙的なインデックス"dat_events_pkey"を作成します
   -> 0.0442s
== 17 CreateDatEvents: migrated (0.0444s) =====================================

== 18 CreateDatEventusers: migrating ==========================================
-- create_table(:dat_eventusers)
NOTICE:  CREATE TABLEはシリアル列"dat_eventusers.id"用に暗黙的なシーケンス"dat_eventusers_id_seq"を作成します
。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_eventusers"に暗黙的なインデックス"dat_eventusers_pkey"を作成
します
   -> 0.0120s
== 18 CreateDatEventusers: migrated (0.0121s) =================================

== 19 CreateDatEventfiles: migrating ==========================================
-- create_table(:dat_eventfiles)
NOTICE:  CREATE TABLEはシリアル列"dat_eventfiles.id"用に暗黙的なシーケンス"dat_eventfiles_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_eventfiles"に暗黙的なインデックス"dat_eventfiles_pkey"を作成
します
   -> 0.0128s
== 19 CreateDatEventfiles: migrated (0.0129s) =================================

== 20 CreateDatMilestones: migrating ==========================================
-- create_table(:dat_milestones)
NOTICE:  CREATE TABLEはシリアル列"dat_milestones.id"用に暗黙的なシーケンス"dat_milestones_id_seq"を作成します
。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"dat_milestones"に暗黙的なインデックス"dat_milestones_pkey"を作成
します
   -> 0.0262s
== 20 CreateDatMilestones: migrated (0.0264s) =================================

== 20081003021027 UpdateDatTaskHistoriesReportDate: migrating =================
-- add_column(:dat_taskhistories, :report_date, :date)
   -> 0.0017s
== 20081003021027 UpdateDatTaskHistoriesReportDate: migrated (0.0019s) ========


$ rake db:fixtures:load
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

作成されたデータベースをpsqlで確認する:

$ psql -l
                                                データベース一覧
          名前          |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権     
------------------------+----------+------------------+-------------+-------------------+-----------------------
 ninearrows_development | USERNAME | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 postgres               | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0              | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                                        : postgres=CTc/postgres
 template1              | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                                        : postgres=CTc/postgres
(4 行)

作成されたテーブルとシーケンスの一覧をpsqlで表示する:

$ psql ninearrows_development
psql (8.4.2)
"help" でヘルプを表示します.

ninearrows_development=> \d
                    リレーションの一覧
 スキーマ |           名前           |    型    |  所有者
----------+--------------------------+----------+----------
 public   | dat_eventfiles           | table    | USERNAME
 public   | dat_eventfiles_id_seq    | sequence | USERNAME
 public   | dat_events               | table    | USERNAME
 public   | dat_events_id_seq        | sequence | USERNAME
 public   | dat_eventusers           | table    | USERNAME
 public   | dat_eventusers_id_seq    | sequence | USERNAME
 public   | dat_milestones           | table    | USERNAME
 public   | dat_milestones_id_seq    | sequence | USERNAME
 public   | dat_projectcomps         | table    | USERNAME
 public   | dat_projectcomps_id_seq  | sequence | USERNAME
 public   | dat_projectlogs          | table    | USERNAME
 public   | dat_projectlogs_id_seq   | sequence | USERNAME
 public   | dat_projects             | table    | USERNAME
 public   | dat_projects_id_seq      | sequence | USERNAME
 public   | dat_projectusers         | table    | USERNAME
 public   | dat_projectusers_id_seq  | sequence | USERNAME
 public   | dat_taskcmts             | table    | USERNAME
 public   | dat_taskcmts_id_seq      | sequence | USERNAME
 public   | dat_taskfiles            | table    | USERNAME
 public   | dat_taskfiles_id_seq     | sequence | USERNAME
 public   | dat_taskhistories        | table    | USERNAME
 public   | dat_taskhistories_id_seq | sequence | USERNAME
 public   | dat_tasks                | table    | USERNAME
 public   | dat_tasks_id_seq         | sequence | USERNAME
 public   | dat_taskusers            | table    | USERNAME
 public   | dat_taskusers_id_seq     | sequence | USERNAME
 public   | mst_compositions         | table    | USERNAME
 public   | mst_compositions_id_seq  | sequence | USERNAME
 public   | mst_messages             | table    | USERNAME
 public   | mst_messages_id_seq      | sequence | USERNAME
 public   | mst_templates            | table    | USERNAME
 public   | mst_templates_id_seq     | sequence | USERNAME
 public   | mst_tpevents             | table    | USERNAME
 public   | mst_tpevents_id_seq      | sequence | USERNAME
 public   | mst_tpmilestones         | table    | USERNAME
 public   | mst_tpmilestones_id_seq  | sequence | USERNAME
 public   | mst_tptasks              | table    | USERNAME
 public   | mst_tptasks_id_seq       | sequence | USERNAME
 public   | mst_users                | table    | USERNAME
 public   | mst_users_id_seq         | sequence | USERNAME
 public   | schema_migrations        | table    | USERNAME
(41 行)

ninearrows_development=> \q

$
[編集]

postfix, mailx パッケージのインストール (メールサーバ, メールクライアント) #

メールサーバとしてとりあえずPostfixを「ローカルのみ」でインストールする。 (後で設定を変えるなら dpkg-reconfigure postfix で直す)

$ sudo aptitude install postfix
...
以下の新規パッケージがインストールされます:
  postfix
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
アーカイブ 1,304kB 中 0B を取得する必要があります。 展開後に 3,248kB のディスク領域が新たに消費されます。
...
Postfix Configuration
---------------------

あなたの用途に合ったメールサーバ設定形式を選んでください。

 設定なし:
  現在の設定をそのままにしたいときに選びます。
 インターネットサイト:
  メールは SMTP を使って直接送受信されます。
 スマートホスト付きインターネット:
  メールは SMTP を使って直接、あるいは fetchmail のようなユーティリティ
  を実行して受信されます。送出メールはスマートホストを使って送信されます。
 サテライトシステム:
  すべてのメールは配送用の「スマートホスト」と呼ばれる別のマシンに送られます。
 ローカルのみ:
  配送されるのはローカルユーザへのメールのみです。ネットワークはありません。

  1. 設定なし                                      4. サテライトシステム
  2. インターネットサイト                    5. ローカルのみ
  3. スマートホスト付きインターネット

メール設定の一般形式: 5


"メール名" はドメイン名が指定されていないときに「すべての」メールアドレスを "修飾" するのに使われるドメイン名
です。これは <root> への/からのメールを含みます: root@example.org で受け付けるようになっていない限り、
root@example.org からのメールをあなたのマシンから送出しないようにしてください。

この名前はほかのプログラムによっても使われます。これは、メールがそこから送出されることになる単一の完全修飾ドメ
イン名 (FQDN) にすべきです。

そのため、たとえばローカルホストのメールアドレスが foo@example.jp なら、example.org がここでの適切な値となりま
す。

システムメール名: localhost


未選択パッケージ postfix を選択しています。
(データベースを読み込んでいます ... 現在 69210 個のファイルとディレクトリがインストールされています。)
...
(.../postfix_2.6.5-3_i386.deb から) postfix を展開しています...
ufw のトリガを処理しています ...
man-db のトリガを処理しています ...
postfix (2.6.5-3) を設定しています ...
グループ `postfix' (GID 114) を追加しています...
終了。
システムユーザ `postfix' (UID 105) を追加しています...
新しいユーザ `postfix' (UID 105) をグループ `postfix' に追加しています...
ホームディレクトリ `/var/spool/postfix' は作成しませんでした.
Creating /etc/postfix/dynamicmaps.cf
Adding tcp map entry to /etc/postfix/dynamicmaps.cf
グループ `postdrop' (GID 115) を追加しています...
終了。
setting myhostname: ubuntu910s.localdomain
setting alias maps
setting alias database
mailname is not a fully qualified domain name.  Not changing /etc/mailname.
setting destinations: localhost, ubuntu910s.localdomain, localhost.localdomain, localhost
setting relayhost:
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: loopback-only
setting default_transport: error
setting relay_transport: error
/etc/aliases does not exist, creating it.
WARNING: /etc/aliases exists, but does not have a root alias.

Postfix is now set up with a default configuration.  If you need to make
changes, edit
/etc/postfix/main.cf (and others) as needed.  To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

Running newaliases
 * Stopping Postfix Mail Transport Agent postfix
   ...done.
 * Starting Postfix Mail Transport Agent postfix
   ...done.
...


$

また、動作確認用にメールクライアントをインストールしておく。

$ sudo aptitude install mailx
...
以下の新規パッケージがインストールされます:
  bsd-mailx{a} mailx
0 個のパッケージを更新、 2 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
168kB のアーカイブを取得する必要があります。 展開後に 340kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...
[編集]

9arrows を Webrick で実行 #

スクリプトに実行属性を付ける

$ head -1 script/*
==> script/about <==
#!/usr/bin/env ruby

==> script/breakpointer <==
#!/usr/bin/env ruby

==> script/console <==
#!/usr/bin/env ruby

==> script/destroy <==
#!/usr/bin/env ruby

==> script/generate <==
#!/usr/bin/env ruby

==> script/performance <==
head: `script/performance' の読み込みエラー: Is a directory

==> script/plugin <==
#!/usr/bin/env ruby

==> script/process <==
head: `script/process' の読み込みエラー: Is a directory

==> script/runner <==
#!/usr/bin/env ruby

==> script/server <==
#!/usr/bin/env ruby

$ find script -type f | xargs chmod +x

ポート3000番でWebrickを起動して、Webブラウザで http://ホスト名:3000/ にアクセスしてみる:

$ ./script/server webrick --port=3000
=> Booting WEBrick...

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

=> Rails 2.1.0 application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2010-02-22 22:54:30] INFO  WEBrick 1.3.1
[2010-02-22 22:54:30] INFO  ruby 1.8.7 (2009-06-12) [i486-linux]
[2010-02-22 22:54:30] INFO  WEBrick::HTTPServer#start: pid=2188 port=3000
192.168.142.1 - - [22/Feb/2010:23:06:01 JST] "GET / HTTP/1.1" 200 1615        ★Webブラウザからアクセスした
- -> /
192.168.142.1 - - [22/Feb/2010:23:06:01 JST] "GET /stylesheets/app/login.css?1220883118 HTTP/1.1" 200 1035
http://192.168.142.141:3000/ -> /stylesheets/app/login.css?1220883118
192.168.142.1 - - [22/Feb/2010:23:06:01 JST] "GET /images/btn/btn_login.gif?1220883118 HTTP/1.1" 200 662
http://192.168.142.141:3000/ -> /images/btn/btn_login.gif?1220883118
192.168.142.1 - - [22/Feb/2010:23:06:01 JST] "GET /images/icon_signup_prefix.gif?1220883118 HTTP/1.1" 200 55
http://192.168.142.141:3000/ -> /images/icon_signup_prefix.gif?1220883118
192.168.142.1 - - [22/Feb/2010:23:06:01 JST] "GET /images/login_header.gif HTTP/1.1" 200 8768
http://192.168.142.141:3000/stylesheets/app/login.css?1220883118 -> /images/login_header.gif
192.168.142.1 - - [22/Feb/2010:23:06:02 JST] "GET /favicon.ico HTTP/1.1" 200 0
- -> /favicon.ico

9arrowsにログインしてみる。アカウントはデフォルトの物を使用した(ログインID「9arrows@example.com」、パスワード「9arrows」)。 (参考: 9arrows導入でつまづいた点をメモる « SawanoBlog.)

2010-03-01 補足 9arrows-0.9.0.2/9arrows/script/about を実行してみる:

$ ./script/about

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

About your application's environment
Ruby version              1.8.7 (i486-linux)
RubyGems version          1.3.5
Rails version             2.1.0
Active Record version     2.1.0
Action Pack version       2.1.0
Active Resource version   2.1.0
Action Mailer version     2.1.0
Active Support version    2.1.0
Application root          /home/USERNAME/9arrows-0.9.0.2/9arrows
Environment               development
Database adapter          postgresql
Database schema version   20081003021027
[編集]

Phusion Passenger の調査 #

(2010-02-23/24)

Phusion Passenger:

Phusion Passengerのインストール方法:

  1. パッケージを使う
    1. Ubuntu 9.10 のUniverseのパッケージを使う
    2. http://apt.brightbox.net のUbuntu用パッケージ (たぶん Hardy = 8.04 LTS用) を使う
    3. パッケージを作る(既存のパッケージの中身を入れ替える)
  2. gem install passenger,.. する
  3. tar-ball をダウンロード指定、インストールする。
[編集]

apache2 パッケージのインストール #

(2010-02-24)

aptitude install libapache2-mod-passenger で Apacheをインストールすると、aptitude purge/remove libapache2-mod-passenger したときにApacheがアンインストールされる。

これを避けるために、Apache 2.2 を先にインストールする。

$ sudo aptitude install apache2
...
以下の新規パッケージがインストールされます:
  apache2 apache2-mpm-worker{a} apache2-utils{a} apache2.2-bin{a} apache2.2-common{a} libapr1{a}
  libaprutil1{a} libaprutil1-dbd-sqlite3{a} libaprutil1-ldap{a}
0 個のパッケージを更新、 9 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
2,013kB のアーカイブを取得する必要があります。 展開後に 6,738kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...

この時点でApache 2.2が起動しているので、WebブラウザでこのApacheにアクセスして「It works!」と表示されることを確かめておく。

[編集]

libapache2-mod-passenger パッケージのインストール #

(2010-02-24)

Ubuntu 10.04では Passenger のバージョンが 2.2.7 に更新されている ので、 近い将来 (2010-05) に Ubuntu 10.04 にアップグレードすることを想定しつつ、Ubuntu 9.10 の passenger を用いることにする。

Ubuntu 9.10のパッケージを調べる:

$ aptitude search passenger
p   libapache2-mod-passenger                       - Rails and Rack support for Apache2
p   passenger-doc                                  - Rails and Rack support for Apache2 - Documentation

$ aptitude show libapache2-mod-passenger
パッケージ: libapache2-mod-passenger
新規: yes
状態: インストールされていません
バージョン: 2.0.3-0ubuntu2
優先度: 任意
セクション: universe/web
メンテナ: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
展開サイズ: 995k
依存: libapr1, libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libruby1.8 (>= 1.8.7.72), libstdc++6 (>= 4.1.1),
        apache2-mpm-worker, ruby, rubygems1.8
提案: python, rails, passenger-doc
説明: Rails and Rack support for Apache2
 Phusion Passenger ? a.k.a. mod_rails or mod_rack ? makes deployment of Ruby web applications, such as those
 built on the revolutionary Ruby on Rails web framework, a breeze.
ホームページ: http://www.modrails.com/

libapache2-mod-passenger パッケージをインストールする:

$ sudo aptitude install libapache2-mod-passenger
...
以下の新規パッケージがインストールされます:
  libapache2-mod-passenger
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
241kB のアーカイブを取得する必要があります。 展開後に 995kB のディスク領域が新たに消費されます。
...
apache2/mods-available/passenger.conf を追加登録中
apache2/mods-available/passenger.load を追加登録中
apache2/mods-enabled/passenger.conf を追加登録中
apache2/mods-enabled/passenger.load を追加登録中
passenger_version.txt を追加登録中
...

このパッケージが持つ設定、コマンド、文書を調べる:

$ dpkg -L libapache2-mod-passenger | grep etc/
/etc/passenger_version.txt
/etc/apache2
/etc/apache2/mods-available
/etc/apache2/mods-available/passenger.conf
/etc/apache2/mods-available/passenger.load

$ dpkg -L libapache2-mod-passenger | grep bin/
/usr/bin/passenger-config
/usr/bin/passenger-stress-test
/usr/sbin/passenger-memory-stats
/usr/sbin/passenger-make-enterprisey
/usr/sbin/passenger-status

$ dpkg -L libapache2-mod-passenger | grep doc/
/usr/share/doc/libapache2-mod-passenger
/usr/share/doc/libapache2-mod-passenger/README
/usr/share/doc/libapache2-mod-passenger/README.Debian
/usr/share/doc/libapache2-mod-passenger/copyright
/usr/share/doc/libapache2-mod-passenger/changelog.Debian.gz

マニュアルを読む。

$ less /usr/share/doc/libapache2-mod-passenger/README.Debian

「No need to run any installers or other programs. The package does all that for you.」だそうだ。 つまり「gem install passenger」「passenger-install-apache2-module」の実行は不要。

passenger の設定が読み込まれているかどうか、確認する:

$ cd /etc/apache2/
$ ls mods-enabled/pas*
mods-enabled/passenger.conf@  mods-enabled/passenger.load@

$ ls mods-available/pas*
mods-available/passenger.conf  mods-available/passenger.load

$ sudo grep -i passenger /var/log/apache2/error.log
[Tue Feb 23 21:06:08 2010] [notice] Apache/2.2.12 (Ubuntu) Phusion_Passenger/2.0.3 configured 
-- resuming normal operations

今回使うPassengerは少し古いので、現状のマニュアルと相違点があるかも知れない。そこで、passenger-doc パッケージでルもインストールしておく:

$ sudo aptitude install passenger-doc
...
以下の新規パッケージがインストールされます:
  passenger-doc
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
527kB のアーカイブを取得する必要があります。 展開後に 2,638kB のディスク領域が新たに消費されます。
...

$ dpkg -L passenger-doc
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/passenger-doc
/usr/share/doc/passenger-doc/README
/usr/share/doc/passenger-doc/DEVELOPERS.TXT
/usr/share/doc/passenger-doc/passenger
/usr/share/doc/passenger-doc/passenger/Architectural overview.txt.gz
...
/usr/share/doc/passenger-doc/passenger/Security of user switching support.txt.gz
/usr/share/doc/passenger-doc/copyright
/usr/share/doc/passenger-doc/changelog.Debian.gz
[編集]

9arrows を Apache + libapache2-mod-passenger で実行する (トップディレクトリで動作させる) #

(2010-02-24/25)

passenger の設定内容を確認する:

$ cd /etc/apache2
$ cat mods-available/passenger.load
LoadModule passenger_module /usr/lib/apache2/modules/mod_passenger.so

$ cat mods-available/passenger.conf
<IfModule mod_passenger.c>
  PassengerRoot /usr
  PassengerRuby /usr/bin/ruby
</IfModule>

9arrows を運用時の場所 (/var/rails/9arrows に決めた) にコピーする:

$ sudo mkdir -p /var/rails/
$ cp -a 9arrows-0.9.0.2/9arrows /var/rails/

/var/rails/9arrows/config/database.yml を修正する(productionを修正):

$ diff -u 9arrows-0.9.0.2/9arrows/config/database.yml /var/rails/9arrows/config/database.yml
--- 9arrows-0.9.0.2/9arrows/config/database.yml   2008-09-08 21:59:34.000000000 +0900
+++ /var/rails/9arrows/config/database.yml      2010-02-26 20:39:01.912871883 +0900
@@ -30,7 +30,7 @@

 production:
   adapter: postgresql
-  database: 9arrows_production
-  username: postgres
-  password: postgres
+  database: ninearrows_production
+  username: www-data
+  password: password
   host: localhost

/var/rails/9arrowsのパーミッションと所有者を修正する:

  • 自分自身を www-data グループに入れて、所有者を変更せずにパーミッションは 660/770 でも良かったかも。やり直すつもりはないけど。
$ sudo find /var/rails/9arrows -type f | sudo xargs chmod 600
$ sudo find /var/rails/9arrows -type d | sudo xargs chmod 700
$ sudo find /var/rails/9arrwos/script -type f | sudo xargs chmod 700
$ sudo chown -R www-data:www-data /var/rails/9arrows

www-dataでPostgreSQLを使えるようにする:

$ sudo -u postgres -i
postgres@ubuntu910s:~$ createuser --no-superuser --no-createrole --createdb --pwprompt www-data
新しいロールのパスワード:
もう一度入力してください:
postgres@ubuntu910s:~$ logout
$ sudo -u www-data psql -h localhost template1
パスワード:
psql (8.4.2)
SSL 接続 (暗号化方式: DHE-RSA-AES256-SHA, ビット長: 256)
"help" でヘルプを表示します.

template1=> \q

9arrows/public/.htaccess の中身を確認する:

$ cat public/.htaccess
# General Apache options
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI

# If you don't want Rails to look in certain directories,
# use the following rewrite rules so that Apache won't rewrite certain requests
#
# Example:
#   RewriteCond %{REQUEST_URI} ^/notrails.*
#   RewriteRule .* - [L]

# Redirect all requests not available on the filesystem to Rails
# By default the cgi dispatcher is used which is very slow
#
# For better performance replace the dispatcher with the fastcgi one
#
# Example:
#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On

# If your Rails application is accessed via an Alias directive,
# then you MUST also set the RewriteBase in this htaccess file.
#
# Example:
#   Alias /myrailsapp /path/to/myrailsapp/public
#   RewriteBase /myrailsapp

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

# In case Rails experiences terminal errors
# Instead of displaying this message you can supply a file here which will be rendered instead
#
# Example:
#   ErrorDocument 500 /500.html

ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

9arrows/public/.htaccess で mod_rewrite が使われているので、このモジュールを有効にする:

$ sudo a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

$ sudo apache2ctl configtest
Syntax OK

$ sudo /etc/init.d/apache2 restart

VistualHost を使うために、/etc/hosts にエントリ (IPアドレス 9arrows) を足しておく。

/etc/apache2/sites-available/9arrows に、Apache + Passenger で9arrowsを動かすための設定を用意する:

<VirtualHost 9arrows:80>
  ServerName 9arrows
  DocumentRoot /var/rails/9arrows/public
  RailsBaseURI /
  <Directory /var/rails/9arrows/public>
    Allow from all
    Options -MultiViews
  </Directory>
</VirtualHost>

設定をApacheに追加して、文法を検査する:

$ sudo a2ensite 9arrows
$ sudo apache2ctl configtest

(オプション)/etc/apache2/sites-available/9arrows を etckeeper (+Mercurial) の管理下にする:

$ sudo hg commit -m "add 9arrows settings (for passenger)" /etc/apache2/sites-available/9arrows

www-dataユーザで、db:create, db:migrate, db:fixtures:load を実行する:

$ cd /var/rails/9arrows
$ sudo -u www-data rake RAILS_ENV=production db:create
$ sudo -u www-data rake RAILS_ENV=production db:migrate
$ sudo -u www-data rake RAILS_ENV=production db:fixtures:load

Apacheを再起動して、9arrowsの設定を読み込ませる:

$ sudo /etc/init.d/apache2 restart
...

Webクライアント側の/etc/hosts にも、9arrowsを動作させるPCのIPアドレスとホスト名(9arrows)を足して、Webアクセス http://9arrows/ してみる。 → ログイン画面が正常に表示された。CSSもちゃんと読み込まれる。

[編集]

9arrows を Apache + libapache2-mod-passenger で実行する (サブディレクトリで動作させる) #

(2010-02-25/26)

Passengerでは、標準的な設定では「http://9arrows.hostname.example.jp/」のようなURLで動作させる。 でも、これでは SSLを使いたいときに、サイトごとに別の証明書か、あるいはワイルドカード証明書が必要になるので、避けたい。

よって、「http://hostname.example.jp/9arrows」の用のサブディレクトリで動作させてみる。

最初に、以下のようにしたところ、/var/www/9arrows の中身のファイルが一覧表示されてしまう。また、log/production.logが生成されないので、9arrows自体にアクセスすらされていないようだ。

$ sudo ln -s /var/rails/9arrows/public /var/www/9arrows
$ (/etc/apache2/sites-available/passenger を以下のように修正)
$ sudo apache2ctl configtest
Syntax OK
$ (9arrows/public/.htaccess はCGI/FastCGI用の設定っぽいので、リネームして無効化した)
$ sudo /etc/init.d/apache2 restart
...

/etc/apache2/sites-available/passenger の内容 (うまくいかない: ディレクトリの中身が表示されてしまう):

<VirtualHost *:80>
  RailsBaseURI /9arrows
  <Directory /var/www/9arrows>
    Options -MultiViews
  </Directory>
</VirtualHost>

そこで、「VirtualHost *:80」を消したところ、うまく動いた。(‥‥なんで?) /etc/apache2/sites-available/passenger の内容(うまくいった):

 RailsBaseURI /9arrows
 <Directory /var/www/9arrows>
   Options -MultiViews
 </Directory>

9arrows-passenger-01m.png

9arrows-passenger-02.png

/var/rails/9arrows/log/production.log の内容。警告が出てる:

...
[Fri Feb 26 20:50:27 2010] [notice] Apache/2.2.12 (Ubuntu) Phusion_Passenger/2.0.3 configured 
-- resuming norm al operations
[Fri Feb 26 20:50:55 2010] [error] [client 192.168.65.1] File does not exist: /var/www/favicon.ico
[Fri Feb 26 20:50:55 2010] [error] [client 192.168.65.1] File does not exist: /var/www/favicon.ico
[Fri Feb 26 20:50:58 2010] [error] [client 192.168.65.1] File does not exist: /var/www/favicon.ico
/usr/lib/ruby/1.8/passenger/application.rb:58:Warning: Gem::SourceIndex#search support for String 
patterns is deprecated, use #find_name
...

Webブラウザで9arrowsのログイン画面をリロード (ctrl-r) を数回実行すると、こんな感じ (htopパッケージをインストールしてhtopを実行→tでツリー表示):

 CPU[#*                                       1.3%]     Tasks: 110 total, 2 running
 Mem[|||||||||||||||||####***************187/497MB]     Load average: 0.00 0.00 0.00
 Swp[|                                     0/894MB]     Uptime: 02:44:50

 PID USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
   1 root      20   0  2524  1224  1120 S  0.0  0.2  0:01.53 /sbin/init
9420 www-data  20   0 36672 22860  2644 S  0.0  4.5  0:03.48  `- Rails: /var/rails/9arrows
9418 www-data  20   0 36672 22860  2644 S  0.0  4.5  0:01.13  `- Rails: /var/rails/9arrows
9414 www-data  20   0 36672 22856  2640 S  0.0  4.5  0:00.14  `- Rails: /var/rails/9arrows
9411 www-data  20   0 36672 22856  2640 S  0.0  4.5  0:00.14  `- Rails: /var/rails/9arrows
9409 www-data  20   0 36672 22856  2640 S  0.0  4.5  0:00.18  `- Rails: /var/rails/9arrows
9176 www-data  20   0 36672 22860  2644 S  0.0  4.5  0:00.42  `- Rails: /var/rails/9arrows
7955 root      20   0  6936  2840  1508 S  0.0  0.6  0:00.22  `- /usr/sbin/apache2 -k start
7963 www-data  20   0  223M  3716  1604 S  0.0  0.7  0:00.00  |   `- /usr/sbin/apache2 -k start
8019 www-data  20   0  223M  3716  1604 S  0.0  0.7  0:00.00  |   |   `- /usr/sbin/apache2 -k start
8018 www-data  20   0  223M  3716  1604 S  0.0  0.7  0:00.00  |   |   `- /usr/sbin/apache2 -k start
8017 www-data  20   0  223M  3716  1604 S  0.0  0.7  0:00.00  |   |   `- /usr/sbin/apache2 -k start
8016 www-data  20   0  223M  3716  1604 S  0.0  0.7  0:00.00  |   |   `- /usr/sbin/apache2 -k start
... (下にスクロールしてから、右にスクロール)
S  0.0  0.7  0:00.00  |   |   `- /usr/sbin/apache2 -k start
S  0.0  0.3  0:00.00  |   `- /usr/lib/passenger/ApplicationPoolServerExecutable 0 /usr/lib/passenger/passenge
S  0.0  0.3  0:00.02  |   |   `- /usr/lib/passenger/ApplicationPoolServerExecutable 0 /usr/lib/passenger/pass
S  0.0  0.3  0:00.02  |   |   `- /usr/lib/passenger/ApplicationPoolServerExecutable 0 /usr/lib/passenger/pass
S  0.0  0.3  0:00.00  |   |   `- /usr/lib/passenger/ApplicationPoolServerExecutable 0 /usr/lib/passenger/pass
S  0.0  0.3  0:00.00  |   |   `- /usr/lib/passenger/ApplicationPoolServerExecutable 0 /usr/lib/passenger/pass
S  0.0  1.2  0:00.09  |   |   `- Passenger spawn server
S  0.0  4.4  0:00.88  |   |       `- Passenger FrameworkSpawner: 2.1.0
S  0.0  4.3  0:00.28  |   |       |   `- Passenger ApplicationSpawner: /var/rails/9arrows
R  0.0  1.2  0:03.00  |   |       `- Passenger spawn server
S  0.0  0.4  0:00.00  |   `- /usr/sbin/apache2 -k start
S  0.0  1.1  0:00.56  `- /usr/lib/postgresql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=
S  0.0  1.2  0:00.34  |   `- postgres: www-data ninearrows_production ::1(50950) idle
S  0.0  1.2  0:00.14  |   `- postgres: www-data ninearrows_production ::1(50949) idle
S  0.0  1.2  0:00.02  |   `- /usr/lib/postgresql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_f
S  0.0  1.2  0:00.04  |   `- postgres: www-data ninearrows_production ::1(50947) idle
S  0.0  1.2  0:00.02  |   `- postgres: www-data ninearrows_production ::1(50946) idle
S  0.0  1.2  0:00.04  |   `- postgres: www-data ninearrows_production ::1(50944) idle
S  0.0  0.2  0:00.22  |   `- postgres: stats collector process
S  0.0  0.3  0:00.24  |   `- postgres: autovacuum launcher process
S  0.0  0.3  0:00.70  |   `- postgres: wal writer process
S  0.0  0.7  0:00.91  |   `- postgres: writer process
S  0.0  0.3  0:00.02  `- /usr/lib/postfix/master
S  0.0  0.3  0:00.00  |   `- pickup -l -t fifo -u -c

9arrowsにログインしてみる。アカウントはデフォルトの物を使用した(ログインID「9arrows@example.com」、パスワード「9arrows」)。 (参考: 9arrows導入でつまづいた点をメモる « SawanoBlog.)

[編集]

SQLite を用いる場合 (注意: Webrickしか試してない) #

(2010-03-04)

PostgreSQL の代わりに SQLite を用いてみる。

Ubuntu Server 9.10 (32bit) のインストール直後から。

Ubuntuのバージョンを調べる:

$ lsb_release -a

Ubuntuパッケージの更新〜再起動(必要なら):

$ sudo aptitude update && sudo aptitude -y safe-upgrade && sudo aptitude autoclean
$ sudo shutdown -r now

9arrowsのソースコードを入手:

$ wget http://9arrows.com/download/9arrows-all-0.9.0.2.tar.gz

Ubuntuパッケージをインストールする:

 sudo aptitude -y install build-essential ruby ruby-dev libopenssl-ruby rubygems postfix mailx

gemでrailsなどをインストールする:

$ sudo gem install rails --version '= 2.1.0'
$ sudo ln -s /var/lib/gems/1.8/bin/* /usr/local/bin/

gem で sqlite3-ruby をインストールする →失敗:

$ sudo gem install sqlite3-ruby
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3-ruby:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
checking for fdatasync() in -lrt... yes
checking for sqlite3.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/usr/bin/ruby1.8
        --with-sqlite3-dir
        --without-sqlite3-dir
        --with-sqlite3-include
        --without-sqlite3-include=${sqlite3-dir}/include
        --with-sqlite3-lib
        --without-sqlite3-lib=${sqlite3-dir}/lib
        --with-rtlib
        --without-rtlib

Gem files will remain installed in /var/lib/gems/1.8/gems/sqlite3-ruby-1.2.5 for inspection.
Results logged to /var/lib/gems/1.8/gems/sqlite3-ruby-1.2.5/ext/sqlite3_api/gem_make.out

SQLite3 のライブラリの開発用パッケージを検索してインストールし、ヘッダファイル sqlite3.h が存在することを確認する:

$ aptitude search libsqlite | grep dev
v   libsqlite-dev                   -
p   libsqlite0-dev                  - SQLite development files
p   libsqlite3-dev                  - SQLite 3 development files
p   libsqlite3-ocaml-dev            - Embeddable SQL Database for OCaml Programs

$ sudo aptitude -y install libsqlite3-dev
...
以下の新規パッケージがインストールされます:
  libsqlite3-dev
以下のパッケージは『削除』されます:
  bsd-mailx{u} libdb4.6{u} mailx{u}
0 個のパッケージを更新、 1 個を新たにインストール、 3 個を削除予定、0 個が更新されていない。
369kB のアーカイブを取得する必要があります。 展開後に 766kB のディスク領域が解放されます。
...

$ sudo aptitude -y install mailx

$ dpkg -L libsqlite3-dev | grep sqlite3.h
/usr/include/sqlite3.h

再度、gem で sqlite3-ruby をインストールする →成功(なにか警告っぽい物が表示されてるけど):

$ sudo gem install sqlite3-ruby
Building native extensions.  This could take a while...
Successfully installed sqlite3-ruby-1.2.5
1 gem installed
Installing ri documentation for sqlite3-ruby-1.2.5...

No definition for _wrap_new_CallbackData

No definition for _wrap_CallbackData_proc_set

No definition for _wrap_CallbackData_proc_get

No definition for _wrap_CallbackData_proc2_set

No definition for _wrap_CallbackData_proc2_get

No definition for _wrap_CallbackData_data_set

No definition for _wrap_CallbackData_data_get

No definition for _wrap_sqlite3_libversion

No definition for _wrap_sqlite3_close

No definition for _wrap_sqlite3_last_insert_rowid

No definition for _wrap_sqlite3_changes

No definition for _wrap_sqlite3_total_changes

No definition for _wrap_sqlite3_interrupt

No definition for _wrap_sqlite3_complete

No definition for _wrap_sqlite3_complete16

No definition for _wrap_sqlite3_busy_handler

No definition for _wrap_sqlite3_busy_timeout

No definition for _wrap_sqlite3_set_authorizer

No definition for _wrap_sqlite3_trace

No definition for _wrap_sqlite3_open

No definition for _wrap_sqlite3_open16

No definition for _wrap_sqlite3_errcode

No definition for _wrap_sqlite3_errmsg

No definition for _wrap_sqlite3_errmsg16

No definition for _wrap_sqlite3_prepare

No definition for _wrap_sqlite3_prepare16

No definition for _wrap_sqlite3_bind_blob

No definition for _wrap_sqlite3_bind_double

No definition for _wrap_sqlite3_bind_int

No definition for _wrap_sqlite3_bind_int64

No definition for _wrap_sqlite3_bind_null

No definition for _wrap_sqlite3_bind_text

No definition for _wrap_sqlite3_bind_text16

No definition for _wrap_sqlite3_bind_parameter_count

No definition for _wrap_sqlite3_bind_parameter_name

No definition for _wrap_sqlite3_bind_parameter_index

No definition for _wrap_sqlite3_column_count

No definition for _wrap_sqlite3_column_name

No definition for _wrap_sqlite3_column_name16

No definition for _wrap_sqlite3_column_decltype

No definition for _wrap_sqlite3_column_decltype16

No definition for _wrap_sqlite3_step

No definition for _wrap_sqlite3_data_count

No definition for _wrap_sqlite3_column_blob

No definition for _wrap_sqlite3_column_bytes

No definition for _wrap_sqlite3_column_bytes16

No definition for _wrap_sqlite3_column_double

No definition for _wrap_sqlite3_column_int

No definition for _wrap_sqlite3_column_int64

No definition for _wrap_sqlite3_column_text

No definition for _wrap_sqlite3_column_text16

No definition for _wrap_sqlite3_column_type

No definition for _wrap_sqlite3_finalize

No definition for _wrap_sqlite3_reset

No definition for _wrap_sqlite3_create_function

No definition for _wrap_sqlite3_create_function16

No definition for _wrap_sqlite3_aggregate_count

No definition for _wrap_sqlite3_value_blob

No definition for _wrap_sqlite3_value_bytes

No definition for _wrap_sqlite3_value_bytes16

No definition for _wrap_sqlite3_value_double

No definition for _wrap_sqlite3_value_int

No definition for _wrap_sqlite3_value_int64

No definition for _wrap_sqlite3_value_text

No definition for _wrap_sqlite3_value_text16

No definition for _wrap_sqlite3_value_text16le

No definition for _wrap_sqlite3_value_text16be

No definition for _wrap_sqlite3_value_type

No definition for _wrap_sqlite3_result_blob

No definition for _wrap_sqlite3_result_double

No definition for _wrap_sqlite3_result_error

No definition for _wrap_sqlite3_result_error16

No definition for _wrap_sqlite3_result_int

No definition for _wrap_sqlite3_result_int64

No definition for _wrap_sqlite3_result_text

No definition for _wrap_sqlite3_result_text16

No definition for _wrap_sqlite3_result_text16le

No definition for _wrap_sqlite3_result_text16be

No definition for _wrap_sqlite3_result_value

No definition for _wrap_sqlite3_aggregate_context
Installing RDoc documentation for sqlite3-ruby-1.2.5...

No definition for _wrap_new_CallbackData

No definition for _wrap_CallbackData_proc_set

No definition for _wrap_CallbackData_proc_get

No definition for _wrap_CallbackData_proc2_set

No definition for _wrap_CallbackData_proc2_get

No definition for _wrap_CallbackData_data_set

No definition for _wrap_CallbackData_data_get

No definition for _wrap_sqlite3_libversion

No definition for _wrap_sqlite3_close

No definition for _wrap_sqlite3_last_insert_rowid

No definition for _wrap_sqlite3_changes

No definition for _wrap_sqlite3_total_changes

No definition for _wrap_sqlite3_interrupt

No definition for _wrap_sqlite3_complete

No definition for _wrap_sqlite3_complete16

No definition for _wrap_sqlite3_busy_handler

No definition for _wrap_sqlite3_busy_timeout

No definition for _wrap_sqlite3_set_authorizer

No definition for _wrap_sqlite3_trace

No definition for _wrap_sqlite3_open

No definition for _wrap_sqlite3_open16

No definition for _wrap_sqlite3_errcode

No definition for _wrap_sqlite3_errmsg

No definition for _wrap_sqlite3_errmsg16

No definition for _wrap_sqlite3_prepare

No definition for _wrap_sqlite3_prepare16

No definition for _wrap_sqlite3_bind_blob

No definition for _wrap_sqlite3_bind_double

No definition for _wrap_sqlite3_bind_int

No definition for _wrap_sqlite3_bind_int64

No definition for _wrap_sqlite3_bind_null

No definition for _wrap_sqlite3_bind_text

No definition for _wrap_sqlite3_bind_text16

No definition for _wrap_sqlite3_bind_parameter_count

No definition for _wrap_sqlite3_bind_parameter_name

No definition for _wrap_sqlite3_bind_parameter_index

No definition for _wrap_sqlite3_column_count

No definition for _wrap_sqlite3_column_name

No definition for _wrap_sqlite3_column_name16

No definition for _wrap_sqlite3_column_decltype

No definition for _wrap_sqlite3_column_decltype16

No definition for _wrap_sqlite3_step

No definition for _wrap_sqlite3_data_count

No definition for _wrap_sqlite3_column_blob

No definition for _wrap_sqlite3_column_bytes

No definition for _wrap_sqlite3_column_bytes16

No definition for _wrap_sqlite3_column_double

No definition for _wrap_sqlite3_column_int

No definition for _wrap_sqlite3_column_int64

No definition for _wrap_sqlite3_column_text

No definition for _wrap_sqlite3_column_text16

No definition for _wrap_sqlite3_column_type

No definition for _wrap_sqlite3_finalize

No definition for _wrap_sqlite3_reset

No definition for _wrap_sqlite3_create_function

No definition for _wrap_sqlite3_create_function16

No definition for _wrap_sqlite3_aggregate_count

No definition for _wrap_sqlite3_value_blob

No definition for _wrap_sqlite3_value_bytes

No definition for _wrap_sqlite3_value_bytes16

No definition for _wrap_sqlite3_value_double

No definition for _wrap_sqlite3_value_int

No definition for _wrap_sqlite3_value_int64

No definition for _wrap_sqlite3_value_text

No definition for _wrap_sqlite3_value_text16

No definition for _wrap_sqlite3_value_text16le

No definition for _wrap_sqlite3_value_text16be

No definition for _wrap_sqlite3_value_type

No definition for _wrap_sqlite3_result_blob

No definition for _wrap_sqlite3_result_double

No definition for _wrap_sqlite3_result_error

No definition for _wrap_sqlite3_result_error16

No definition for _wrap_sqlite3_result_int

No definition for _wrap_sqlite3_result_int64

No definition for _wrap_sqlite3_result_text

No definition for _wrap_sqlite3_result_text16

No definition for _wrap_sqlite3_result_text16le

No definition for _wrap_sqlite3_result_text16be

No definition for _wrap_sqlite3_result_value

No definition for _wrap_sqlite3_aggregate_context

$ gem list

*** LOCAL GEMS ***

actionmailer (2.1.0)
actionpack (2.1.0)
activerecord (2.1.0)
activeresource (2.1.0)
activesupport (2.1.0)
rails (2.1.0)
rake (0.8.7)
sqlite3-ruby (1.2.5) ★

config/database.ymlを修正:

$ cd 9arrows-0.9.0.2/9arrows
$ emacs config/database.yml
  • adapterをsqlite3に修正する。
  • databaseを「db/ninearrows_development.db」にする。(なお、db/9arrows_development.db にしてもエラーは出ないけど)
    • SQLite3 のデータベースファイルは、この場所に生成される。
  • username, password, host の行は消す。(SQLite3 では不要)
diff -r dff1eebb4085 9arrows/config/database.yml
--- a/9arrows/config/database.yml       Thu Mar 04 21:19:34 2010 +0900
+++ b/9arrows/config/database.yml       Thu Mar 04 21:27:10 2010 +0900
@@ -12,11 +12,8 @@
 # And be sure to use new-style password hashing:
 #   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
 development:
-  adapter: postgresql
-  database: 9arrows_development
-  username: postgres
-  password: postgres
-  host: localhost
+  adapter: sqlite3
+  database: db/ninearrows_development.db

 # Warning: The database defined as 'test' will be erased and
 # re-generated from your development database when you run 'rake'.
 

DBを初期化する:

$ rake db:create
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************
db/ninearrows_development.db already exists
$ rake db:migrate
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

== 1 CreateMstUsers: migrating ================================================
-- create_table(:mst_users)
   -> 0.0109s
== 1 CreateMstUsers: migrated (0.0110s) =======================================

== 2 CreateMstMessages: migrating =============================================
-- create_table(:mst_messages)
   -> 0.0081s
== 2 CreateMstMessages: migrated (0.0082s) ====================================

== 3 CreateMstTemplates: migrating ============================================
-- create_table(:mst_templates)
   -> 0.0067s
== 3 CreateMstTemplates: migrated (0.0068s) ===================================

== 4 CreateMstCompositions: migrating =========================================
-- create_table(:mst_compositions)
   -> 0.0062s
== 4 CreateMstCompositions: migrated (0.0063s) ================================

== 5 CreateMstTptasks: migrating ==============================================
-- create_table(:mst_tptasks)
   -> 0.0064s
== 5 CreateMstTptasks: migrated (0.0065s) =====================================

== 6 CreateMstTpevents: migrating =============================================
-- create_table(:mst_tpevents)
   -> 0.0058s
== 6 CreateMstTpevents: migrated (0.0059s) ====================================

== 7 CreateMstTpmilestones: migrating =========================================
-- create_table(:mst_tpmilestones)
   -> 0.0058s
== 7 CreateMstTpmilestones: migrated (0.0059s) ================================

== 8 CreateDatProjects: migrating =============================================
-- create_table(:dat_projects)
   -> 0.0091s
== 8 CreateDatProjects: migrated (0.0092s) ====================================

== 9 CreateDatProjectusers: migrating =========================================
-- create_table(:dat_projectusers)
   -> 0.0074s
== 9 CreateDatProjectusers: migrated (0.0075s) ================================

== 10 CreateDatProjectcomps: migrating ========================================
-- create_table(:dat_projectcomps)
   -> 0.0066s
== 10 CreateDatProjectcomps: migrated (0.0066s) ===============================

== 11 CreateDatProjectlogs: migrating =========================================
-- create_table(:dat_projectlogs)
   -> 0.0071s
== 11 CreateDatProjectlogs: migrated (0.0072s) ================================

== 12 CreateDatTasks: migrating ===============================================
-- create_table(:dat_tasks)
   -> 0.0089s
== 12 CreateDatTasks: migrated (0.0090s) ======================================

== 13 CreateDatTaskusers: migrating ===========================================
-- create_table(:dat_taskusers)
   -> 0.0079s
== 13 CreateDatTaskusers: migrated (0.0080s) ==================================

== 14 CreateDatTaskfiles: migrating ===========================================
-- create_table(:dat_taskfiles)
   -> 0.0078s
== 14 CreateDatTaskfiles: migrated (0.0079s) ==================================

== 15 CreateDatTaskhistories: migrating =======================================
-- create_table(:dat_taskhistories)
   -> 0.0075s
== 15 CreateDatTaskhistories: migrated (0.0076s) ==============================

== 16 CreateDatTaskcmts: migrating ============================================
-- create_table(:dat_taskcmts)
   -> 0.0084s
== 16 CreateDatTaskcmts: migrated (0.0086s) ===================================

== 17 CreateDatEvents: migrating ==============================================
-- create_table(:dat_events)
   -> 0.0091s
== 17 CreateDatEvents: migrated (0.0092s) =====================================

== 18 CreateDatEventusers: migrating ==========================================
-- create_table(:dat_eventusers)
   -> 0.0112s
== 18 CreateDatEventusers: migrated (0.0113s) =================================

== 19 CreateDatEventfiles: migrating ==========================================
-- create_table(:dat_eventfiles)
   -> 0.0083s
== 19 CreateDatEventfiles: migrated (0.0084s) =================================

== 20 CreateDatMilestones: migrating ==========================================
-- create_table(:dat_milestones)
   -> 0.0082s
== 20 CreateDatMilestones: migrated (0.0083s) =================================

== 20081003021027 UpdateDatTaskHistoriesReportDate: migrating =================
-- add_column(:dat_taskhistories, :report_date, :date)
   -> 0.0432s
== 20081003021027 UpdateDatTaskHistoriesReportDate: migrated (0.0432s) ========

$ rake db:fixtures:load
(in /home/USERNAME/9arrows-0.9.0.2/9arrows)

      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************

実行権限を付与〜9arrowsをWebrickで起動して動作確認:

$ find script -type f | xargs chmod +x
$ ./script/server webrick

動作確認。Webブラウザで http://ホスト名:3000/ にアクセスして、ログインする ログインID「9arrows@example.com」、パスワード「9arrows」

[編集]

PostgreSQL 8.4 スロークエリの分析 (未完) #

(2010-03-12)

データベース周りのチューニングのために、 スロークエリの分析 ― Let's Postgres で紹介されている contrib/pg_stat_statements を使ってみる (PostgreSQL 8.4 以上)

postgresql-contrib パッケージをインストールする:

$ aptitude search postgresql | grep contrib
p   postgresql-contrib              - additional facilities for PostgreSQL (supp
p   postgresql-contrib-8.3          - additional facilities for PostgreSQL
p   postgresql-contrib-8.4          - additional facilities for PostgreSQL

$ sudo aptitude install postgresql-contrib
...
以下の新規パッケージがインストールされます:
  libossp-uuid15{a} libxslt1.1{a} postgresql-contrib postgresql-contrib-8.4{a}
0 個のパッケージを更新、 4 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
659kB のアーカイブを取得する必要があります。 展開後に 2,286kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?]
...

動作確認のために、postgres ユーザで、デフォルトのデータベースに contrib/pg_stat_statements をインストールする:

$ dpkg -L postgresql-contrib-8.4 | grep pg_stat
/usr/share/postgresql/8.4/contrib/pg_stat_statements.sql
/usr/share/postgresql/8.4/contrib/uninstall_pg_stat_statements.sql
/usr/lib/postgresql/8.4/lib/pg_stat_statements.so

$ sudo -u postgres psql --file /usr/share/postgresql/8.4/contrib/pg_stat_statements.sql
SET
CREATE FUNCTION
CREATE FUNCTION
CREATE VIEW
GRANT
REVOKE

$

ちなみに、再度実行すると次のエラーになる。また、アンインストールするには uninstall_pg_stat_statements.sql を実行すればよいようだ:

$ sudo -u postgres psql --file /usr/share/postgresql/8.4/contrib/pg_stat_statements.sql
SET
psql:/usr/share/postgresql/8.4/contrib/pg_stat_statements.sql:10: ERROR:  同じ引数型を持つ関数"pg_stat_stateme
nts_reset"はすでに存在します
psql:/usr/share/postgresql/8.4/contrib/pg_stat_statements.sql:22: ERROR:  同じ引数型を持つ関数"pg_stat_stateme
nts"はすでに存在します
psql:/usr/share/postgresql/8.4/contrib/pg_stat_statements.sql:26: ERROR:  リレーション"pg_stat_statements"はす
でに存在します
GRANT
REVOKE
$ sudo -u postgres psql --file /usr/share/postgresql/8.4/contrib/uninstall_pg_stat_statements.sql
SET
DROP VIEW
DROP FUNCTION
DROP FUNCTION

$ sudo -u postgres psql --file /usr/share/postgresql/8.4/contrib/uninstall_pg_stat_statements.sql
SET
psql:/usr/share/postgresql/8.4/contrib/uninstall_pg_stat_statements.sql:6: ERROR:  ビュー"pg_stat_statements"
は存在しません
psql:/usr/share/postgresql/8.4/contrib/uninstall_pg_stat_statements.sql:7: ERROR:  関数pg_stat_statements()は
存在しません
psql:/usr/share/postgresql/8.4/contrib/uninstall_pg_stat_statements.sql:8: ERROR:  関数pg_stat_statements_rese
t()は存在しません

postgresql.conf を修正する:

$ sudo emacs /etc/postgresql/8.4/main/postgresql.conf

$ sudo hg diff /etc/postgresql/8.4/main/postgresql.conf
diff -r 498da6e3f8d7 postgresql/8.4/main/postgresql.conf
--- a/postgresql/8.4/main/postgresql.conf       Fri Feb 26 22:46:08 2010 +0900
+++ b/postgresql/8.4/main/postgresql.conf       Fri Mar 12 23:16:08 2010 +0900
@@ -120,7 +120,7 @@

 #max_files_per_process = 1000          # min 25
                                        # (change requires restart)
-#shared_preload_libraries = ''         # (change requires restart)
+shared_preload_libraries = 'pg_stat_statements'                # (change requires restart)

 # - Cost-Based Vacuum Delay -

@@ -497,4 +497,4 @@
 # CUSTOMIZED OPTIONS
 #------------------------------------------------------------------------------

-#custom_variable_classes = ''          # list of custom variable class names
+custom_variable_classes = 'pg_stat_statements'         # list of custom variable class names

PostgreSQL を再起動する → エラー:

  • 文字化けを避けるために「sudo -u /etc/init.d/postgresql...」 の代わりに、 「sudo -i」「export LANG=」「/etc/init.d/postgreql...」してみたが、変わらず。
  • 同様に「sudo -i」「export LANG=」「/etc/init.d/postgreql...」してみたが、変わらず。
  • /var/log/... の内容は、日本語(UTF-8) と文字化けが混在している。
  • この件は納得がいかないので、(LANGが効かない)もう少し試す。
$ sudo /etc/init.d/postgresql-8.4 restart
 * Restarting PostgreSQL 8.4 database server
 * The PostgreSQL server failed to start. Please check the log output:
2010-03-12 23:16:37 JST LOG:  ?????"pg_stat_statements"????????
2010-03-12 23:16:37 JST FATAL:  ??????????????????: Invalid argument
2010-03-12 23:16:37 JST ??:  ????????????shmget(key=5432001, size=33710080, 03600)????
2010-03-12 23:16:37 JST ???:  ?????????PostgreSQL?????????????????????
        SHMMAX??????????????????????????????????
        ?????????SHMMAX????????????????????????(?
        ?33710080???)??????PostgreSQL?shared_buffers?????(??3584)?
        max_connections(??103)??????????????????
        ???????????SHMMIN???????????????????????
        ??????????????????SHMIN????????????????
        ???????????????PostgreSQL?????????????????
   ...fail!

(再起動したときに表示されるエラーメッセージを16進数ダンプしてみる)
$ sudo /etc/init.d/postgresql-8.4 restart 2>&1 | xxd -g1
0000000: 20 2a 20 52 65 73 74 61 72 74 69 6e 67 20 50 6f   * Restarting Po
0000010: 73 74 67 72 65 53 51 4c 20 38 2e 34 20 64 61 74  stgreSQL 8.4 dat
0000020: 61 62 61 73 65 20 73 65 72 76 65 72 0a 20 2a 20  abase server. *
0000030: 54 68 65 20 50 6f 73 74 67 72 65 53 51 4c 20 73  The PostgreSQL s
0000040: 65 72 76 65 72 20 66 61 69 6c 65 64 20 74 6f 20  erver failed to
0000050: 73 74 61 72 74 2e 20 50 6c 65 61 73 65 20 63 68  start. Please ch
0000060: 65 63 6b 20 74 68 65 20 6c 6f 67 20 6f 75 74 70  eck the log outp
0000070: 75 74 3a 0a 32 30 31 30 2d 30 33 2d 31 33 20 30  ut:.2010-03-13 0
0000080: 30 3a 31 30 3a 31 31 20 4a 53 54 20 4c 4f 47 3a  0:10:11 JST LOG:
0000090: 20 20 3f 3f 3f 3f 3f 22 70 67 5f 73 74 61 74 5f    ?????"pg_stat_
00000a0: 73 74 61 74 65 6d 65 6e 74 73 22 3f 3f 3f 3f 3f  statements"?????
00000b0: 3f 3f 3f 0a 32 30 31 30 2d 30 33 2d 31 33 20 30  ???.2010-03-13 0
00000c0: 30 3a 31 30 3a 31 31 20 4a 53 54 20 46 41 54 41  0:10:11 JST FATA
00000d0: 4c 3a 20 20 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  L:  ????????????
00000e0: 3f 3f 3f 3f 3f 3f 3a 20 49 6e 76 61 6c 69 64 20  ??????: Invalid
00000f0: 61 72 67 75 6d 65 6e 74 0a 32 30 31 30 2d 30 33  argument.2010-03
0000100: 2d 31 33 20 30 30 3a 31 30 3a 31 31 20 4a 53 54  -13 00:10:11 JST
0000110: 20 3f 3f 3a 20 20 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f   ??:  ??????????
0000120: 3f 3f 73 68 6d 67 65 74 28 6b 65 79 3d 35 34 33  ??shmget(key=543
0000130: 32 30 30 31 2c 20 73 69 7a 65 3d 33 33 37 31 30  2001, size=33710
0000140: 30 38 30 2c 20 30 33 36 30 30 29 3f 3f 3f 3f 0a  080, 03600)????.
0000150: 32 30 31 30 2d 30 33 2d 31 33 20 30 30 3a 31 30  2010-03-13 00:10
0000160: 3a 31 31 20 4a 53 54 20 3f 3f 3f 3a 20 20 3f 3f  :11 JST ???:  ??
0000170: 3f 3f 3f 3f 3f 3f 3f 50 6f 73 74 67 72 65 53 51  ???????PostgreSQ
0000180: 4c 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  L???????????????
0000190: 3f 3f 3f 3f 3f 3f 0a 09 53 48 4d 4d 41 58 3f 3f  ??????..SHMMAX??
00001a0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
00001b0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
00001c0: 0a 09 3f 3f 3f 3f 3f 3f 3f 3f 3f 53 48 4d 4d 41  ..?????????SHMMA
00001d0: 58 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  X???????????????
00001e0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 28 3f 0a 09 3f 33 33  ?????????(?..?33
00001f0: 37 31 30 30 38 30 3f 3f 3f 29 3f 3f 3f 3f 3f 3f  710080???)??????
0000200: 50 6f 73 74 67 72 65 53 51 4c 3f 73 68 61 72 65  PostgreSQL?share
0000210: 64 5f 62 75 66 66 65 72 73 3f 3f 3f 3f 3f 28 3f  d_buffers?????(?
0000220: 3f 33 35 38 34 29 3f 0a 09 6d 61 78 5f 63 6f 6e  ?3584)?..max_con
0000230: 6e 65 63 74 69 6f 6e 73 28 3f 3f 31 30 33 29 3f  nections(??103)?
0000240: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
0000250: 3f 0a 09 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 53 48  ?..???????????SH
0000260: 4d 4d 49 4e 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  MMIN????????????
0000270: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 0a 09 3f 3f 3f  ???????????..???
0000280: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 53  ???????????????S
0000290: 48 4d 49 4e 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  HMIN????????????
00002a0: 3f 3f 3f 3f 0a 09 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????..??????????
00002b0: 3f 3f 3f 3f 3f 50 6f 73 74 67 72 65 53 51 4c 3f  ?????PostgreSQL?
00002c0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
00002d0: 0a 20 20 20 2e 2e 2e 66 61 69 6c 21 0a           .   ...fail!.

$ sudo less /var/log/postgresql/postgresql-8.4-main.log
2010-03-12 23:19:07 JST LOG:  ?????"pg_stat_statements"????????
2010-03-12 23:19:07 JST FATAL:  ??????????????????: Invalid argument
2010-03-12 23:19:07 JST ??:  ????????????shmget(key=5432001, size=33710080, 03600)????
2010-03-12 23:19:07 JST ???:  ?????????PostgreSQL?????????????????????
        SHMMAX??????????????????????????????????
        ?????????SHMMAX????????????????????????(?
        ?33710080???)??????PostgreSQL?shared_buffers?????(??3584)?
        max_connections(??103)??????????????????
        ???????????SHMMIN???????????????????????
        ??????????????????SHMIN????????????????
        ???????????????PostgreSQL?????????????????

(ログファイルを16進数ダンプしてみる)
$ sudo tail /var/log/postgresql/postgresql-8.4-main.log | xxd -g1
0000000: 32 30 31 30 2d 30 33 2d 31 33 20 30 30 3a 31 30  2010-03-13 00:10
0000010: 3a 31 31 20 4a 53 54 20 46 41 54 41 4c 3a 20 20  :11 JST FATAL:
0000020: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
0000030: 3f 3f 3a 20 49 6e 76 61 6c 69 64 20 61 72 67 75  ??: Invalid argu
0000040: 6d 65 6e 74 0a 32 30 31 30 2d 30 33 2d 31 33 20  ment.2010-03-13
0000050: 30 30 3a 31 30 3a 31 31 20 4a 53 54 20 3f 3f 3a  00:10:11 JST ??:
0000060: 20 20 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 73 68    ????????????sh
0000070: 6d 67 65 74 28 6b 65 79 3d 35 34 33 32 30 30 31  mget(key=5432001
0000080: 2c 20 73 69 7a 65 3d 33 33 37 31 30 30 38 30 2c  , size=33710080,
0000090: 20 30 33 36 30 30 29 3f 3f 3f 3f 0a 32 30 31 30   03600)????.2010
00000a0: 2d 30 33 2d 31 33 20 30 30 3a 31 30 3a 31 31 20  -03-13 00:10:11
00000b0: 4a 53 54 20 3f 3f 3f 3a 20 20 3f 3f 3f 3f 3f 3f  JST ???:  ??????
00000c0: 3f 3f 3f 50 6f 73 74 67 72 65 53 51 4c 3f 3f 3f  ???PostgreSQL???
00000d0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
00000e0: 3f 3f 0a 09 53 48 4d 4d 41 58 3f 3f 3f 3f 3f 3f  ??..SHMMAX??????
00000f0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
0000100: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 0a 09 3f 3f  ????????????..??
0000110: 3f 3f 3f 3f 3f 3f 3f 53 48 4d 4d 41 58 3f 3f 3f  ???????SHMMAX???
0000120: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
0000130: 3f 3f 3f 3f 3f 28 3f 0a 09 3f 33 33 37 31 30 30  ?????(?..?337100
0000140: 38 30 3f 3f 3f 29 3f 3f 3f 3f 3f 3f 50 6f 73 74  80???)??????Post
0000150: 67 72 65 53 51 4c 3f 73 68 61 72 65 64 5f 62 75  greSQL?shared_bu
0000160: 66 66 65 72 73 3f 3f 3f 3f 3f 28 3f 3f 33 35 38  ffers?????(??358
0000170: 34 29 3f 0a 09 6d 61 78 5f 63 6f 6e 6e 65 63 74  4)?..max_connect
0000180: 69 6f 6e 73 28 3f 3f 31 30 33 29 3f 3f 3f 3f 3f  ions(??103)?????
0000190: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 0a 09 3f  ?????????????..?
00001a0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 53 48 4d 4d 49 4e  ??????????SHMMIN
00001b0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
00001c0: 3f 3f 3f 3f 3f 3f 3f 0a 09 3f 3f 3f 3f 3f 3f 3f  ???????..???????
00001d0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 53 48 4d 49 4e  ???????????SHMIN
00001e0: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ????????????????
00001f0: 0a 09 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f  ..??????????????
0000200: 3f 50 6f 73 74 67 72 65 53 51 4c 3f 3f 3f 3f 3f  ?PostgreSQL?????
0000210: 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 0a           ????????????.

エラーメッセージがろくに読めないが、shmmax が足りないと睨んで、shmmaxをエラーメッセージ中の値まで増やしてみる→OK:

$ sudo bash -c 'echo 337710080 > /proc/sys/kernel/shmmax'

$ sudo cat /proc/sys/kernel/shmmax
337710080

$ sudo /etc/init.d/postgresql-8.4 restart
 * Restarting PostgreSQL 8.4 database server
   ...done.

この設定は、Linuxの再起動に失われる。Linuxの起動時にこの設定を有効にするには、/etc/sysctl.conf か /etc/sysctl.d/ に設定を用意してやればよい。

/etc/sysctl.d/ に書く場合の例 (ファイル名は 99-shmmax-postgresql.conf にした):

# for postgresql
kernel.shmmax = 337710080

あるいは、postgresql.conf の「max_connections = 100」を少し減らしてみてもよい。

実行してみる (スーパーユーザ権限を持つ postgres で、デフォルトデータベースに対して実行) →OK:

$ sudo -u postgres psql
psql (8.4.2)
"help" でヘルプを表示します.

postgres=# select pg_stat_statements_reset();
 pg_stat_statements_reset
--------------------------

(1 行)

postgres=# select * from pg_stat_statements order by total_time desc limit 3;
 userid | dbid  |               query                | calls | total_time | rows
--------+-------+------------------------------------+-------+------------+------
     10 | 11564 | select pg_stat_statements_reset(); |     1 |   0.000253 |    1
(1 行)

postgres=# \q

$

(以下、作業中)

  • PostgreSQL のログの文字化けを解消する。
  • 9arrows で使うデータベースに対して、上記の設定をする。
[編集]

Ubuntu 10.04 LTS Server へのアップグレード #

(2010-05-08)

2010-04-29 に Ubuntu 10.04 がリリースされたので、移行してみた。

Phusion Passenger (Ubuntu 本家のパッケージに不満があった場合は、こちらを使う):

Ubuntu 10.04 LTS (lucid lynx) のパッケージ情報:

Ubuntu 10.04 LTS:

Ubuntu 10.04 へのアップグレード

update-manager-core をインストールする →インストールされていた:

$ sudo aptitude install update-manager-core
...
インストール・削除・更新されるパッケージがありません。
...

$ dpkg -p update-manager-core
...
Version: 1:0.126.9
...

/etc/update-manager/release-upgrades を修正 →修正不要:

$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=normal

do-release-upgrade でアップグレードする →ssh経由では警告が出るが、続行。問題なし:

$ sudo do-release-upgrade
...
SSH越しに実行していますが、続けますか?

このセッションはSSH上で実行されているようです。アップグレードをSSH越しに行うことは
推奨されません。アップグレードに失敗した時の復元が困難になるからです。

続行する場合、追加のSSHデーモンをポート '9004' で起動します。
本当に作業を進めてよろしいですか?

続行する[yN] y

予備のsshdを開始します


障害が起こったときに復旧しやすくするため、ポート '9004' でもう一つの sshd
を開始します。現在実行中のsshにおかしなことが起きても、もう一方のポートに
接続することができます。

Reading package lists: Donekarmic-security/multiverse Packages: 98
...
いくつかのアプリケーションのサポートは終了しました

今後は Canonical Ltd. は以下のソフトウェアパッケージのサポートを行ないません。
引き続きコミュニティからサポートされます。

サポートレベルの格下げ:
emacs22-nox, libcompress-bzip2-perl, netcat-traditional
... 

4 個のパッケージが削除されます。 51
個の新規パッケージがインストールされます。 376
個のパッケージがアップグレードされます。

合計 244M をダウンロードする必要があります。
このダウンロードは約 2 分 かかります。

アップグレードの取得とインストールには数時間かかることがあります。ダウンロードが終了すると、アップグレードをキ
ャンセルすることはできません。

続行する[yN]  詳細 [d] y
...
(console-setup 
(mlocate updatedb.conf
(grub-pc  ★<いいえ>を選択すると、同じ画面に戻ってしまう。よって<はい>を選択する。

サポートが中止された(あるいはリポジトリに存在しない)パッケージを削除しますか?

18 個のパッケージが削除されます。

続行する[yN]  詳細 [d]d

削除: libbind9-50 libdns50 libisc50 libisccc50 libisccfg50 libiw29

 liblwres50 libntfs-3g54 linux-image-2.6.31-14-generic-pae mailx

(自動インストールされた) libdns53 libkadm5clnt6

 libossp-uuid15 linux-headers-2.6.31-21
 linux-headers-2.6.31-21-generic-pae
 linux-image-2.6.31-19-generic-pae linux-image-2.6.31-20-generic-pae
 x11-common を削除

 続行する[yN]  詳細 [d] y
...
mailx を削除しています ...
...
システムのアップグレードが完了しました。

再起動が必要です

アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。

続行する[yN] y

カーネルが更新されているので、再起動後に VMware-toolbox を再インストールする:

$ sudo /usr/bin/vmware-config-tools.pl -d
...

パッケージを更新する → bsd-mailx (メールクライアント) が削除された。メールの送信テストに使いたいので、再度インストールしておく:

$ sudo aptitude update && sudo aptitude -y safe-upgrade && sudo aptitude autoclean
...
以下のパッケージは『削除』されます:
  bsd-mailx{u}

$ sudo aptitude install bsd-mailx

アップグレード中に「サポートレベルの格下げ」と表示されたパッケージを削除する(削除しても問題がないため):

$ sudo aptitude purge emacs22-nox
...
$ sudo aptitude purge netcat-traditional netcat
...
$ sudo aptitude purge libcompress-bzip2-perl
...

9arrows の動作確認を行う。

  • ログイン → OK
  • プロジェクトの作成 → OK

/var/log/apache2/error.log を確認したが、特にエラーは出ていない:

$ sudo less /var/log/apache2/error.log
...

DashBoard, WBS, Gantt, Calendar, Files を切り替えてみた。VMwareのホスト (Windows 7 Pro 64bit) 上の Firefox 3.6.3 にて操作、YSlow の「接続」タブによると、切替の所要時間は0.3〜1.0秒程度で切り替わる。

[編集]

skype.com への通信 #

(2010-05-09)

VMwareのホスト (Windows 7 Pro 64bit) 上の Firefox 3.6.3 にて操作、YSlow の「接続」タブを表示し、 super-reload (Shift + リロードボタン) してみたところ、 (話には聞いていたが)http://download.skype.com/share/skypebuttons/js/skypeCheck.js を取得している。大きさは 2.8KB で、Webブラウザにキャッシュされない場合、取得に 700ms かかっている。

9arrows-yslow-calendar-skype-superreload.png

リロードした場合も、毎回アクセスしに行く(キャッシュされない)ため、200ms 以上掛かっている:

9arrows-yslow-calendar-skype-reload.png

[編集]

その他 #

(2010-03-11)