pie001's room

about PC, etc...

FastCGI で Ruby on Rails

2006-08-21 13:03:55 | パソコン
CGI で Ruby on Rails を動かしてみたところすごい遅くて不安になったので、
FastCGI で Ruby on Rails を動かしてみた。

OS: Vine Linux 3.2
Apache: 1.3.33


1. mod_fastcgi をコンパイルするため、apxs をインストール
% sudo apt-get install apache-devel


2. mod_fastcgiをダウンロード、インストール
% tar xvfz mod_fastcgi-2.4.2.tar.gz
% cd mod_fastcgi-2.4.2/
% apxs -o mod_fastcgi.so -c *.c
% sudo apxs -i -a -n fastcgi mod_fastcgi.so


3. FastCGI を使うよう設定
[/etc/httpd/conf/httpd.conf]
<IfModule mod_fastcgi.c>
  FastCgiIpcDir /tmp/fcgi_ipc/
  FastCgiConfig -maxClassProcesses 2
  FastCgiConfig -maxProcesses 4
</IfModule>
LoadModule fastcgi_module modules/mod_fastcgi.so
AddModule mod_fastcgi.c

[public/.htaccess]
#RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]


これだけで動くかな・・と思ったら、甘かった。dispatch.fcgi が ruby-fcgi の機能を使ってるらしい。

ruby-fcgi をインストールしようとしたら、fcgi.h が無いというエラーが。FastCGI Developer's Kit も必要だったか。

3. というわけで、FastCGI Developer's Kit をダウンロード、インストール
% tar xvfz fcgi-2.4.0.tar.gz
% cd fcgi-2.4.0/
% ./configure
% make
% sudo make install


4. ruby-fcgi をダウンロード、インストール
% tar xvfz ruby-fcgi-0.8.7.tar.gz
% cd ruby-fcgi-0.8.7/
% ruby install.rb config --without-ext
% ruby install.rb setup
% sudo ruby install.rb install

これで動くようになった。

確かに速い。これなら十分実用レベルだ。


ちなみに gem install fcgi すると、以下のようなエラーが出て動かなかった。

[log/fastcgi.crash.log]
Dispatcher failed to catch: undefined method `is_cgi?' for FCGI:Class (NoMethodError)

ぐぐってみると、
[Rails] trouble with fastcgi and "undefined method `is_cgi?'"
が見つかった。

gem を使うとこのエラーが出て、手動でインストールすると出ないようだ。ちょっとハマった。

CGI で Ruby on Rails

2006-08-20 18:59:04 | パソコン
インストールした Ruby on Rails を、Apache の CGI 経由で呼び出してみた。


public_html 下の rails でアクセスできるよう、以下のように設定。

・/etc/httpd/conf/httpd.conf に以下を追加。
<Directory /home/*/public_html>
  Options +FollowSymLinks
  AllowOverride all
</Directory>

・シンボリックリンク作成
% cd public_html
% ln -s ~/rails/Bookmarker/public rails


これで動かしてみると、動かなかった。

/etc/httpd/logs/error.log を見ると、

File does not exist: /home/httpd/html/home/pie001/rails/Bookmarker/public/index.html とか出てる。見ているパスが変だ。

調べてみると、Alias ディレクティブとかで使う場合、RewriteBase を設定しないといけないらしい。

・public/.htaccess に以下を追加
RewriteBase /~pie001/rails


これで動くようになった。

しかし、確かに遅い。。表示に数秒かかる。

FastCGI を使ってみるか。

Vine Linux 3.2 で Ruby on Rails

2006-08-20 18:29:01 | パソコン
話題の Ruby on Rails を使ってみました。

インストール


以下の手順でインストール。

1. RubyGems をダウンロード、インストール

% tar xvfz rubygems-0.9.0.tgz
% cd rubygems-0.9.0/
% ruby setup.rb
% sudo ruby setup.rb

2. gem を使って Rails をインストール

% sudo gem install rails --include-dependencies

動作確認1


さっそく使ってみようと思い、『Ruby on Rails』入門 アプリケーションの作成:Hotwired を参考に rails コマンドを入力すると…動かない。

Ruby のバージョンが古いとのこと。

なので、ニアリストの東奔西走: Vine Linux 3.2 で Ruby on Railsを参考にしてRuby を 1.8.4 にアップグレード。


そしてアプリケーション作成

% rails Bookmarker

成功。

動作確認2


ついでに動かしてみることに。

データベースの設定を変更

% vi config/database.yml


アプリケーション生成

% ./script/generate scaffold Bookmark

…「No such file or directory - /tmp/mysql.sock」というエラーが発生。

83's:/tmp/mysql.sockが見つからないって言われたを見て修正。


もう一度

% ./script/generate scaffold Bookmark

成功!


サーバー起動

% ./script/server


ブラウザで「http://my.host.name:3000/bookmarks」にアクセスしてみると、、アプリケーションの雛形が出来てる!!

すごい!

coLinuxを別マシンに移動

2006-08-10 13:18:08 | パソコン
coLinux を別マシンに移動しようとしてハマりました。

ファイルを移動するだけで動くだろう、簡単っ!なんて思ってたら、思いがけない落とし穴が待ってた。

結局は単純なミスだったのですが…。


きっかけ


coLinux 便利だけど、私のメインマシン Windows XP で、X サーバ、ブラウザなどと一緒に起動したりすると、メモリが 256MB しかないせいか、動作が重いんですよね。

最近、古いマシンの OS を Windows Me から Windows 2000 にアップグレードしました。

「そうだ、この Windows 2000 で coLinux を動かそう。そして Windows XP マシンからリモートアクセスすれば、快適な環境で Linux が使えるに違いない」

そう思って coLinux を移動することにしました。


準備


「ルートディスク用ファイルとスワップファイル、起動用設定ファイルさえあれば coLinux を移動できる」

と、coLinux 用 インストーラが置いてあるサイトに書いてあった。

問題はネットワークか。

Windows XP では「TAP-Win32 を使ったブリッジ接続」が簡単にできたけど、Windows 2000 ではそうはいかないらしい。(ERROR STORM

別マシンからも coLinux にアクセスしたい。

となると、候補は「WinPCap を使ったブリッジ接続」か「TAP-Win32 でのルータ接続」。(Cooperative Linux(coLinux)のメモ

とりあえずお手軽そうな WinPCap を試してみて、それでパフォーマンスが出なければ TAP でのルータ接続にしよう。


移動


Windows XP 上の coLinux ファイル群を DVD に焼いた。バックアップも兼ねて。

そして Windows 2000 にコピー。これが思いの外時間がかかった。4GB のファイルで 75 分。マシンが古いということか。

ネットワークの設定に入る。


WinPCap でのブリッジ接続


coLinuxのメモ - WinPCapを使ったブリッジ接続を見て設定したけど、Host PC→coLinux、coLinux→Host PC 共に接続できず。

「-t nt」を付けずに coLinux を起動(例: colinux-daemon.exe -c default.colinux.xml)すると起動時のログが見れる。それを見ると「ローカル エリア接続」という名前で検索してるみたいだ。

設定ファイルの network 要素 name 属性を「ローカル エリア接続」に変えてみる。

→起動すらできず。日本語が通らないみたい。

「コントロールパネル」→「ネットワークとダイアルアップ接続」の「ローカル エリア接続」を「local area connection」に変えて、設定ファイルの name 属性も「local area connection」に変えると、接続できるようになった。

<network index="0" name="local area connection" type="bridged"/>

coLinux のバージョン(私が使ってるのは coLinux 0.6.3-pre13)によるのかもしれないが、設定ファイルの network 要素 name 属性は、具体的なデバイス名(「NVIDIA nForce MCP Networking Controller」など)ではなく、接続名(「ローカル エリア接続」など。英語にしないといけない?)なのかもしれない。


しかし使ってみると、、重い。kterm はなんとか動くけど、emacs を起動すると固まって落ちてしまう。しかも Host PC ごと。

TAP でのルータ接続にしよう。


TAP でのルータ接続


coLinuxのメモ - TAP-Win32でのルータ接続を見て、とりあえず Host PC⇔coLinux の設定をしたけど、Host PC→coLinux、coLinux→Host PC 共に接続できず。

Host PC で
>tracert colinux
すると、パケットが coLinux のネットワークに向かわず、デフォルトゲートウェイの方へ流れているようだ。

なにか設定が足りないらしい。そういえば、

NAT接続の設定をしてしまった人は、Host PCのインターネットの共有の設定を必ずオフにしておいてください。

と書いてあった。「もしかして、、」と思い、ちょっと回り道だけど一度NAT接続の設定(coLinuxのメモ - TAP-Win32でのNAT接続参照)をし、その後ルータの設定に戻すと、接続できるようになった。いきなりルータの設定はよくなかったらしい。。


しかし、問題は解決できず。kterm はいいけど、emacs を起動するとフリーズする。しかも coLinux のネットワークが死ぬ。

% /etc/rc.d/init.d/network restart

しても復活しない。強力だ。


一回一回 coLinux を再起動しながら、emacs -nw -q --no-site-file してどこで落ちるのかを調べると、どうも canna を起動した後に落ちるらしい。

別サーバの canna を見に行くよう設定すると、落ちずに emacs を起動できた。

でもおかしい。同じディスク用ファイルで、Windows XP ではなにも問題なく canna を使えた。どこが違うんだろう。。。。。。

 ハマりました。canna のログを出力させて見比べたりすること、計 4 ~ 5 時間くらい。

もうあきらめよう、、そう思いつつ、なにげなく設定ファイルのメモリサイズを 128MB → 64MB に変更して起動すると、、emacs を起動できた!!

すごいあっけなく。なんだ、メモリが足りなかったのか。それならそうと言ってくれればいいのに。そういえば Windows 2000 マシン、メモリ 192MB だからなぁ。。

emacs が起動できなかったのは WinPCap のせいではなかったかもしれない。まぁいいや、ルータ接続の残りの設定をしよう。


TAP でのルータ接続(残りの設定)


coLinux からインターネットに接続するために、無線 LAN アクセスポイント(WHR-G54S/P)に、coLinux 向けのパケットは Host PC に転送するよう設定をした。



あとは、他マシンから coLinux にアクセスできるよう設定するだけ。

 他マシンといっても、Linux とかならルーティングテーブルを操作できそうだけど、Windows にもできるのか?

と思ってたら、@IT - route~ルーティングテーブルの表示/設定を行うに書いてありました。

コマンドラインで設定可能。だけど、ヘタすると接続できなくなるので、試す方は注意してくださいね。


私の環境では、Host PC は 192.168.11.8 なので、

>route add 192.168.0.0 mask 255.255.255.0 192.168.11.8

とした。しかし、tracert するとパケットがループしてる!

metric(優先度)を設定しないといけなかったらしい。Windows XP を再起動して再度設定。

>route add 192.168.0.0 mask 255.255.255.0 192.168.11.8 metric 20 if 2

これで接続できるようになった。

>route -p add 192.168.0.0 mask 255.255.255.0 192.168.11.8 metric 20 if 2

で起動時に有効にする。


おお、確かに WinPCap より速いかもしれない。TAP によるルータにして良かった。



以上で coLinux の移動完了。一日仕事でした。

(メモリ不足にもっと早く気づいていれば…)

秀丸用 Java 強調表示ファイルを作ってみた

2006-08-01 18:06:28 | パソコン
Windows で Java のプログラムを書くときは、秀丸& Ant を使ってます。

Eclipse、やっぱなんか重くて。



今まではデフォルトの設定で使ってたのですが、ソースが色分けされたら

いいなと思い、秀丸サイトにある強調表示定義ファイルを使うことにしました。


いくつかあったのですが、でもなかなか気に入るものがないんですね。

クラスを登録しないといけなかったり。

コメントが Java のコードで色分けされたり。。

括弧の位置によって、メソッドとみなしてくれなかったり。。。


 色分けされるよう、Java のコードを修正する?

 でもそれってちょっと違うだろ…(゜o゜)\(-_-)



というわけで、自分で強調表示定義ファイルを書くことにしました。



まず、仕様を考えることに。


Java のコードを「特に強調1」とかを使って強調すると、

コメントより優先度が高いため、コメント内であっても Java のコード色で

色付けされることになる。

コメントより優先度の低い「強調1」~「強調8」や「行の強調」を使って

強調しないと。。

見やすい色へは、設定で変更してもらおう。


反対に、コメント内であっても色付けしたい要素は?

javadoc タグか。


検索の条件には指定したいけど、色は塗りたくない。

どうすれば…?

他人の書いた強調表示定義ファイルをいろいろ見てたら、HmJre.dll に

それができる前方一致、前方不一致などの機能があることを知り、

使うことにする。



…試行錯誤の末、完成!


さっそくテストしてみると、

自分の書く Java ソースコードだけじゃなく、JDK 付属のソースコードや

他人が書いたコードでも、わりときちんと強調表示された。



すごいカラフルだ。

vim や emacs はもちろん、Eclipse や市販の IDE にも

負けてないんじゃないだろうか。

ちょっと目がチカチカする。やりすぎたかもしれない。



まあいいや。

とりあえず登録してみました。

Java 用強調表示定義ファイル 2006 Ver1.04

(追記:
 秀丸サイトのライブラリ登録システムでは、ライブラリを更新したときに
 入れ替えることができないらしい。
 「新しいファイル名でアップロードし、公開されたら古いライブラリを削除してください」
 とのこと。よって、バージョンアップする毎に URL が変更になります。
 カウンタもリセットされます(;_;))
(2006.8.3 Ver1.03 ダウンロード数 143)
(2006.8.8 Ver1.04)

使ってみてくださいませ。

ご要望などありましたら、コメント欄にお願いします。