忘れたときに備えた記録

トップ 最新 追記
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|

2008-06-04(Wednesday)

Rubyで自作したWebアプリケーションを何らかのWebサーバでfast-cgiを使って動かす場合、CGIクラスを使うことが出来るのか、それとも別のクラスを使うのか、互換性はあるのか、そもそもどうやってfast-cgiするのか、ということをまとめたメモです。

サーバ

RubyOnRailsアプリを

  • Apache2とfast-cgiで動かす(fastcgiモジュールが2つあってごちゃごちゃ困った嫌な思い出がある)
  • Apache2をフロントエンドにして、バックエンドでlighttpd+fastcgiで動かす物にproxyする(結構いい感じだった印象)

というのはやったことがあったので、今回は

  • lighttpd+fast-cgiで非railなcgiを動かしてみる(復習を兼ねて)
  • mongrelを試してみる(初挑戦)

を目指してみます。

lighttpd

ubuntu用のパッケージもあるけど、普段動かしているapacheとバッティングするし、色々試すので自前でコンパイルすることにします。

まずはlighttpdを http://www.lighttpd.net/ からダウンロードしてきてコンパイル。libpcre-devというパッケージが必要だとでたので、ubuntuのパッケージをインストールして、改めてコンパイルしてインストール。

$ tar jxf lighttpd-1.4.19.tar.bz2
$ cd lighttpd-1.4.19
$ ./configure --prefix=$HOME/opt/lighttpd
$ make && make install

これで、~/opt/lighttpd/以下に実行ファイルとライブラリがインストールされます。また、ソースを展開した後のdoc/ディレクトリ以下にドキュメントが入っています。

あとは色々いじるための準備をこんな感じで

$ mkdir -p ~/lighttpd/doc              # 作業用ディレクトリ
$ cp doc/lighttpd.conf ~/lighttpd/conf # 設定ファイル

普通にCGI

設定ファイルは取りあえずコメントを外して、ポートも変えてこんな感じ

server.modules              = (
                                "mod_access",
                               "mod_cgi",
                                "mod_accesslog" )
server.document-root        = "/home/hiraku/lighttpd/doc/"
server.errorlog             = "/home/hiraku/lighttpd/error.log"
accesslog.filename          = "/home/hiraku/lighttpd/access.log"
server.port = 20080
server.pid-file            = "/home/hiraku/lighttpd/pid"
cgi.assign = ( ".rb" => "/usr/bin/ruby")

これは変えた部分の抜粋で、他の部分はそのまま残してます。

で、取りあえず実行

$ ~/opt/lighttpd/sbin/lighttpd -f conf

http://localhost:20080/ にアクセスすると404になるので、適当なindex.htmlを~/lighttpd/doc/に入れると表示されます。 同じディレクトリに実行権限つけたrubyスクリプトを置いて表示させても、きちんと実行されました。

fcgi

gemでfcgiをインストールします

$ sudo apt-get install libfcgi-dev  # 最初これをやらずにいてfcgiのコンパイルに失敗
$ gem1.8 install fcgi

rdocが提供されてなくて一瞬あせりますが、~/opt/gem/gems/fcgi-0.8.7/README にちゃんとサンプルとか書いてあるのでそっちを参考にします。

とりあえずREADMEの

 #!/usr/bin/ruby
 require "fcgi"

 FCGI.each {|request|
   out = request.out
   out.print "Content-Type: text/plainrn"
   out.print "rn"
   out.print Time.now.to_s
   request.finish
 }

これを動かしてみましょう。

これを ~/lighttpd/test.fcgiという名前で保存して、lighttpdの設定ファイルに

fastcgi.server = ( ".fcgi" =>
			   ( "localhost" =>
			   ( "socket" => "/home/hiraku/lighttpd/socket",
			   "bin-path" => "/home/hiraku/lighttpd/test.fcgi"
)))

を書いて、lighttpdを再起動します。

$ kill `cat pid`
$ ~/opt/lighttpd/sbin/lighttpd

これで、http://localhost:20080/test.fcgiにアクセスすれば、fst-cgiで動いているプログラムの出力が表示されます。

とりあえず、今日はここまで。


2008-06-05(Thursday)

Amalgam 始めました

民主的な秘密組織で世界征服を狙おうという話ではないのです(なんのこっちゃ

SubversionにはCodeReposが、gitにはgithubがあります。 特にrailsがgithubを使うようになったので、Ruby界隈がgitgitにされつつあるなぁとなどと思っていたのですが、今日突然ムラムラと思い立って、作ってしまいました。Mercurial版のそんなシステム、Amalgam(水銀合金)です。

https://www.hinet.mydns.jp/amalgam/ で試験運用しています。

実際にはCodeReposやgithubのように本格的な物を狙っているのではなくて、ローカルなネットの中でコードを共有するのにウェブからinitやcloneできるサーバがあったら便利だろうなと、その程度の思いつきで作ってます。逆にそういう用途には多分最適…かな?

一応、ちょっと工夫していて、フックを使って"pushの際にpushした人以外のコミットが含まれていたら拒絶する"という仕組みを入れています。

このサーバで動かしているAmalgamは、全く新規のリポジトリを作ることは出来なくて(設定で、新規リポジトリを作れようにもできます)、サーバー内の既存のリポジトリのクローンから始めるしか出来ません。GPL2.0のCOPYINGだけを入れた License/GPL/2.0 というリポジトリを作ってあるのでそれをクローンして始めることになります。

こんなライセンスを使いたいというのがあったら、お知らせ頂いたら追加します。

とりあえず、Amalgamそのもののソースと、自分でRubyの仕様を確認するのに作ったオレオレRSPECを登録しています。

というわけで、試しに使ってみたいという人がいらしたら、 hiraku.amalgam@hinet.mydns.jp にhtpasswdをメールしてもらえれば登録しますので、どうぞよろしくお願いします。

その他、ドキュメントとか詳しい解説とかは、おいおい書いていきます(実は今ちょっと激しく忙しくて(つまり現実逃避?)、すこし遅くなるかもしれませんが)。

Tags: Mercurial

2008-06-06(Friday)

Amalgam 終了のお知らせ

世界征服はすでに完了していた、と言う話ではないのです(しつこい

Amalgamという名前のプロジェクトが既に存在していたことが分かったのです。しかもCodeReposのプロジェクトに。

それで他にいい名前はないかなと少し調べたら、Amalgamの語源であるギリシャ語のmalagma(やわらかい固まり)が、ドメイン名も使われていなかったので、こっちにすることにしました。

名前の変更が終わったら仕切り直します。


2008-06-17(Tuesday)

malagma.org はじめました

Amalgamという名前がすでに使われていたので休止していたMercurialのホスティングサービスを、名前を Malagma と改めて始めました。

http://malagma.org/ からトップページに行って、画面下の Registration からアカウントを登録することが出来ます。当面はSSL通信のサーバの証明書にオレオレ証明書を使うので、そのつもりでご利用ください。

リポジトリの作成

malagma.orgでは、既存のリポジトリからcloneすることで新しいリポジトリを作成します。

GPL2のCOPYINGだけが入ったリポジトリを License/GPL/2/ に用意しているので、これをcloneしてください。ほかに使いたいライセンスがあったら教えていただければ追加しますが、自由な改変と再配布を認める、オープンソースライセンスに限ります。

リポジトリ用のディレクトリ名について

リポジトリの作成時には、 directory/repository の形でリポジトリ名を入力します。リポジトリ名の前にディレクトリ名が必須で、ディレクトリの最初の部分には個人用の User/ かと共有用の Share/ を使います。

User/project_name

User/id/project_name の形に補完してリポジトリを作成します。このリポジトリには作成した人だけがpush/pullすることが出来ます。

Share/project_name

直接、入力した名前でリポジトリが作成されるので、適当なジャンル名を間に挟むのがおすすめです。ここのリポジトリにはmalagma.orgにアカウントを持っていれば誰でもpush/pullすることが出来ます。

テスト用ディレクトリについて

http://malagma.org/test/ に、テスト用のサービスを用意しています。ページ上部に TEST-malagmaと表示されるのが目印です。

ここは http://malagma.org/ のリポジトリ群とは独立して管理されており、時々消去して http://malagma.org/ からデータをコピーする形でリセットします。

気兼ねなくcloneやpull出来ますので、Malagmaの操作の練習にご利用ください。

リポジトリへのコミットについて

malagmaから手元にcloneしたリポジトリにチェックインする場合は、-uオプションや.hgrcファイルで指定するユーザー名を以下のいずれかにする必要があります。

この条件を満たさないユーザ名で行われたchangesetが含まれていると、malagma.orgにpushすることが出来ません。

`@'を含む場合

ユーザ名の末尾に '<mail@examplle.org>'の形で、malagma.orgのアカウント作成時に使ったメールアドレスが必要です。メールアドレスの前の部分は任意です。

例:

$ hg ci -m hoge -u "KURODA <hiraku@example.org>"
`@'を含まない場合

ユーザ名の最初の1単語目を、malagma.orgのアカウントIDと同じにしてください。その後空白で区切った後は`@'以外の任意の文字列を入れることができます。

例:

$ hg ci -m hoge -u 'hiraku / KURODA Hiraku'

Wikiについて

Hikiを使っています。SpamBayesによるフィルタリングを行っているのですが、もしかしたらspamではないのにspamだと判定されるかもしれません。

投稿した編集データは僕の方に別途届きますので、誤判定だった場合はこちらで投稿しなおします。

Tags: malagma

その他

「リポジトリの名前を間違えて作ってしまった」「ライセンスを追加してほしい」「malagma.orgがうまく動かない!!」などなど、何かありましたら、にコメントでお知らせください。どうぞよろしくお願いします m(_ _)m

追記

初期状態のリポジトリを作り直しました(汗

ブランチ名について

ブランチ名をつけずに default のままにすると、後で別の名前のブランチを追加したときに、cloneした作業ディレクトリのrevisionがdefaultの最後のrevisionになってしまうので、それぞれのブランチ名で初期化した License/GPL/2/trunk とLicense/GPL/2/default の2つのリポジトリを用意しました。好みに応じて使い分けてください。

test ディレクトリについて

http://malagma.org/test/http://malagma.org/ のコピーそのままではうまく動かないので、GPL2だけ用意した状態になっています。

各リポジトリの.hg/hgrcを修正するスクリプトを作ればコピーしたものでもうまく動くはずなので、後日そのようにします。

Tags: malagma

さらに追記

  • サーバの設定にミスがあって malagma.org に push 出来なかった問題を解決しました。
  • テスト用コードがフックに残っていたせいで malagma.org への push に失敗していた問題を解決しました

一時停止のお知らせ

開始早々で申し訳ありませんが、6/18の14時20分から6/19の夕方頃まで malagma.org のサービスを一時停止します。

どうぞよろしくお願いしますm(_ _)m

Tags: malagma
本日のツッコミ(全2件) [ツッコミを入れる]

_ hama [User/hama/dir/hama User/hama/hama/dir/h2o ↑ 2つ削除お願いします。 Us..]

_ hiraku [ディレクトリの方、今しがた削除しました。 User/以下のディレクトリですが、作成者だけに許可されているのはpul..]


2008-06-19(Thursday)

サービス再開しました

休止していた http://malagma.org/ のサービスを再開しました。

Tags: malagma

2008-06-21(Saturday)

ライセンスリポジトリを作り直しました

License/GPL/2/default と License/GPL/2/default のCOPYINGをチェックアウトしたユーザ名を "hiraku <hiraku(at)hinet.mydns.jp>" としていたのですが、これを "Admin of malagma" という名前に変えてリポジトリを作り直しました。

Tags: malagma

ソースを公開しました

もう少しリファクタリングしてからと思って先延ばしに公開していなかったのですが、今日のRuby会議で刺激を受けるところがあって、公開しました。ライセンスはGPL2です。

http://malagma.org はこのままのソースで動いています。

$ hg clone https://s.malagma.org/repos/hgwebdir.cgi/User/hiraku/ruby/mercurial/
$ rake external:setup

とすれば依存するライブラリもダウンロードしますので、あとは設定ファイルやCGIファイルを必要に応じて書き換えれば動作します。

Tags: malagma