Erlang でできた Twitter クローン、 Twoorl をインストールしてみました。
所長の関です。
ちょっと時間ができた時にたまたま Twitter で「Erlang でできたオープンソースの Twitter クローンが公開された」というつぶやきを見かけたので、早速インストールして動かしてみました。
Twoorl という名前のアプリケーションです。 作者の Palo Alto さんのブログはこちら。
http://yarivsblog.com/articles/2008/05/28/announcing-twoorl-an-open-source-erlyweb-based-twitter-clone/
週末に雨が降っていて、寒かったのでちょっと作ってみたそうです。すごいですね。
丸1日と、数回の午後を使って、コード は 1,700 行ほどとか。
作者が Twoorl を作った理由に
- Erlang の Web フレームワークである、ErlyWeb の使いかたを示すショーケースとして
- Twitter は中毒になるほど楽しいが、作ってみるのも楽しいと思った
- Twitter は有名だが、作者の知るかぎりオープンソースのクローンがない。誰か望む人がいると思った
- Erlang は web アプリケーションを作るのに向いていないという人がいるが、その人が間違っていることを証明したかった
- 並列処理が機能の恩恵を活かすことができるので、 Erlang は Twitter クローンを作るのにとても向いている。
というようなことを上げています。
また、作者は、Twoorl は現状では完全にスケールする作りにはなっていないとも書いています。
インストールは Leopard 上で行いました。mysql は MAMP のものをインストール済です。
順番にインストールをしていけばいいですが、ErlyWeb は バイナリで提供されているものではなく、trunk のソースからコンパイルしないとエラーになります。
以下、インストール手順です。
1.Erlang をインストール
http://www.erlang.org/download/ から、最新版の Erlang をダウンロードして、インストールをします。
ダウンロード後、./configure → make → make install でインストールできました。
2. Yaws をインストール
Erlang で書かれたウェブサーバである、Yaws をインストールします。
http://yaws.hyber.org/ からダウンロードできます。
こちらも、特に問題なくインストールできました。
3.ErlyWeb をインストール
Yaws 上で ORマッパやテンプレート機能を提供する ErlyWeb をインストールします。
trunk のソースからコンパイルする必要があります。
まずは、Erlang のライブラリ以下に erlyweb のソースをチェックアウトします。
http://code.google.com/p/twoorl/ から、ソースコードをダウンロードします。
アプリケーションは、~/yaws_apps に置くことにしました。
twoorl というデータベースを作成してあるものとします。
# src/twoorl_app.hrl の内容を今回のアプリケーションに合わせ書き換えます。
今回のアプリケーションに合わせ、/usr/local/etc/yaws.conf を書き換えます。
server ディレクティブ部分のみ書き換えればいいでしょう。
SSL 用の設定などもありますが、余計な server 部分は消してかまいません。
まず、データベースへの接続をオープンします。
yaws コンソール上で、以下のコマンドを実行します。( .... 以下は実行結果 )

もちろん、ユーザー登録やつぶやき、フォローなども問題なくでき、日本語も通りました。
この後は、複数台サーバを繋げる実験などをしてみたいと思っています。
Erlang のアプリケーションを作る際の参考にもなりそうです。皆さんも一度試してみてはいかがでしょうか。
ちょっと時間ができた時にたまたま Twitter で「Erlang でできたオープンソースの Twitter クローンが公開された」というつぶやきを見かけたので、早速インストールして動かしてみました。
Twoorl という名前のアプリケーションです。 作者の Palo Alto さんのブログはこちら。
http://yarivsblog.com/articles/2008/05/28/announcing-twoorl-an-open-source-erlyweb-based-twitter-clone/
週末に雨が降っていて、寒かったのでちょっと作ってみたそうです。すごいですね。
丸1日と、数回の午後を使って、コード は 1,700 行ほどとか。
作者が Twoorl を作った理由に
- Erlang の Web フレームワークである、ErlyWeb の使いかたを示すショーケースとして
- Twitter は中毒になるほど楽しいが、作ってみるのも楽しいと思った
- Twitter は有名だが、作者の知るかぎりオープンソースのクローンがない。誰か望む人がいると思った
- Erlang は web アプリケーションを作るのに向いていないという人がいるが、その人が間違っていることを証明したかった
- 並列処理が機能の恩恵を活かすことができるので、 Erlang は Twitter クローンを作るのにとても向いている。
というようなことを上げています。
また、作者は、Twoorl は現状では完全にスケールする作りにはなっていないとも書いています。
インストールは Leopard 上で行いました。mysql は MAMP のものをインストール済です。
順番にインストールをしていけばいいですが、ErlyWeb は バイナリで提供されているものではなく、trunk のソースからコンパイルしないとエラーになります。
以下、インストール手順です。
1.Erlang をインストール
http://www.erlang.org/download/ から、最新版の Erlang をダウンロードして、インストールをします。
ダウンロード後、./configure → make → make install でインストールできました。
wget http://www.erlang.org/download/otp_src_R12B-2.tar.gz無事インストールできていれば、erl コマンドで Erlang が使えます。
tar xvzf otp_src_R12B-2.tar.gz
cd otp_src_R12B-2
./configure
make
sudo make install
2. Yaws をインストール
Erlang で書かれたウェブサーバである、Yaws をインストールします。
http://yaws.hyber.org/ からダウンロードできます。
こちらも、特に問題なくインストールできました。
wget http://yaws.hyber.org/download/yaws-1.76.tar.gzまだサーバは起動せず次へいきます。
tar xvzf yaws-1.76.tar.gz
cd yaws-1.76
./configure
make
sudo make install
3.ErlyWeb をインストール
Yaws 上で ORマッパやテンプレート機能を提供する ErlyWeb をインストールします。
trunk のソースからコンパイルする必要があります。
まずは、Erlang のライブラリ以下に erlyweb のソースをチェックアウトします。
cd /usr/local/lib/erlang/libMakefile を環境に合わせて書き換え、make.sh を実行します。
svn co http://erlyweb.googlecode.com/svn/trunk/ erlyweb
cd erlyweb
vi Emakefile4.Twoorl をインストール
# {"src/erlyweb/*", [debug_info, {outdir, "ebin"}, {i,"/opt/local/lib/yaws/include"}]}.
# の行を書き換え。この場合は /opt/local/lib/yaws/include を /usr/local/lib/yaws/include
sh make.sh
http://code.google.com/p/twoorl/ から、ソースコードをダウンロードします。
アプリケーションは、~/yaws_apps に置くことにしました。
cd /tmptwoorl.sql というファイルがあるので、mysql のデータベースを作成します。
wget http://twoorl.googlecode.com/files/twoorl-0.2.tar.gz
mkdir ~/yaws_apps
cd ~/yaws_apps
tar xvzf /tmp/twoorl-0.2.tgz
cd twoorl
twoorl というデータベースを作成してあるものとします。
mysql -utwoorl -ppassword twoorl < twoorl.sql
# src/twoorl_app.hrl の内容を今回のアプリケーションに合わせ書き換えます。
vi src/twoorl_app.hrl5.Yaws の起動
-define(DB_HOSTNAME, "localhost").
-define(DB_USERNAME, "twoorl").
-define(DB_PASSWORD, "password").
-define(DB_DATABASE, "twoorl").
-define(APP_PATH, "/path/to/yaws_apps/twoorl").
今回のアプリケーションに合わせ、/usr/local/etc/yaws.conf を書き換えます。
server ディレクティブ部分のみ書き換えればいいでしょう。
SSL 用の設定などもありますが、余計な server 部分は消してかまいません。
<server localhost>書き換えたら、yaws コマンドで Yaws サーバが起動できます。( .... 以下は実行結果 )
port = 80
listen = 0.0.0.0
docroot = /path/to/yaws_apps/twoorl/www
appmods = <"/", erlyweb>
<opaque>
appname = twoorl
</opaque>
</server>
sudo yaws -i6.Twoorl のコンパイルと起動
Password:
....
=INFO REPORT==== 31-May-2008::01:18:50 ===
Yaws: Listening to 0.0.0.0:80 for servers
- http://localhost under /path/to/yaws_apps/twoorl/www
まず、データベースへの接続をオープンします。
yaws コンソール上で、以下のコマンドを実行します。( .... 以下は実行結果 )
erlydb:start(mysql, [{hostname, "localhost"}, {username, "twoorl"},{password, "password"}, {database, "twoorl"}]).次に、Twoorl をコンパイルします。同じく yaws コンソール上で作業します。( .... 以下は実行結果 )
....
mysql_conn:426: fetch <<"use twoorl">> (id <0.66.0>)
ok
# 最初、mysql が標準ポート以外で動いていたので、エラーになりましたが 3306 で動作させたところ繋がりました。
erlyweb:compile("/path/to/yaws_apps/twoorl",[{erlydb_driver, mysql}]).いよいよ、Twoorl を起動します。( .... 以下は実行結果 )
....
debug:erlydb:391: Generating code for msg
debug:erlydb:391: Generating code for following
{ok,{{2008,5,31},{1,26,55}}}
twoorl.start().この状態で、http://localhost/ にアクセスして、以下の画面が表示されれば成功です。
......
debug:erlydb:391: Generating code for reply
debug:erlydb:391: Generating code for msg
debug:erlydb:391: Generating code for following
{ok,{{2008,5,31},{1,27,38}}}
もちろん、ユーザー登録やつぶやき、フォローなども問題なくでき、日本語も通りました。
Erlang のアプリケーションを作る際の参考にもなりそうです。皆さんも一度試してみてはいかがでしょうか。
コメント(2)
コメントする
- Cirius Lab.内リンク
- ラボトップ
- Geo Platform API
- ジオメディアサービス
- 最近のブログ記事
- Mashup Award 5 に API 提供いたします。
- WISH2009 のサポーターになりました。
- ジオジオスタンプラリー第1回「都電で楽しむ位置ゲーと宝探し」開催します。
- 今どの駅にいるのかを表示する iPhone 用 Webページ
- Firefox 3.5 からは、位置情報通知機能 (Geolocation API) が標準搭載に
- 【講演資料】地理空間情報サミット2009 と モバイルIT研究会 で講演してきました。
- 位置表現抽出・管理サービスの LocoSticker と京都の通り名対応ジオコーダ、ジオどすが連携
- ついに iPhone Safari ブラウザから位置情報を取得できるようになります
- ジオメディア紹介:相乗りでタクシー運賃を節約できる、タクワリ
- 頓知・さんが アジア勢の中で唯一の TIE 50 ファイナリストに
手順どおり操作したつもりですが、
Webブラウザで開くと次のように表示されます。
どうもusrテーブルにsession_key列が定義されていないためエラーになっているような気がしますが、テーブルを投入するスクリプトtwoorl.sqlにも
create table usr (
id integer unsigned auto_increment primary key,
username varchar(30) not null,
password char(20) not null,
email varchar(50) not null,
num_msgs integer unsigned not null default 0,
num_replies integer unsigned not null default 0,
created_on timestamp,
unique(username, email)
) engine=innodb;
となっていて、session_keyが定義されていませんがいいのでしょうか?
以下ブラウザにひょじされるエラー
ERROR erlang code crashed:
File: appmod:0
Reason: {undef,
[{twoorl_app_controller,error,
[{arg,#Port,
{{127,0,0,1},1631},
{headers,"Keep-Alive",
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*",
"localhost:8081","Tue, 03 Mar 2009 08:46:19 GMT",
undefined,"\"2THG5MAAAAA\"",undefined,undefined,
undefined,undefined,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
undefined,[],undefined,undefined,undefined,
undefined,undefined,undefined,undefined,
[{http_header,10,'Accept-Encoding',undefined,
"gzip, deflate"},
{http_header,11,'Accept-Language',undefined,"ja"}]},
{http_request,'GET',{abs_path,"/"},{1,1}},
undefined,"/",undefined,[],"c:/erlyweb/twoorl/www","/",
"c:/erlyweb/twoorl/www",undefined,undefined,,
[{app_data_module,twoorl_erlyweb_data},
{"appname","twoorl"}],
[],[],undefined},
undefined,
{error,
{mysql_result,[],[],0,
>}}]},
{erlyweb,out,2},
{yaws_server,deliver_dyn_part,8},
{yaws_server,aloop,3},
{yaws_server,acceptor0,2},
{proc_lib,init_p_do_apply,3}]}
Req: {http_request,'GET',{abs_path,"/"},{1,1}}
Stack: [{twoorl_app_controller,error,
[{arg,#Port,
{{127,0,0,1},1631},
{headers,"Keep-Alive",
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*",
"localhost:8081","Tue, 03 Mar 2009 08:46:19 GMT",
undefined,"\"2THG5MAAAAA\"",undefined,undefined,
undefined,undefined,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
undefined,[],undefined,undefined,undefined,undefined,
undefined,undefined,undefined,
[{http_header,10,'Accept-Encoding',undefined,
"gzip, deflate"},
{http_header,11,'Accept-Language',undefined,"ja"}]},
{http_request,'GET',{abs_path,"/"},{1,1}},
undefined,"/",undefined,[],"c:/erlyweb/twoorl/www","/",
"c:/erlyweb/twoorl/www",undefined,undefined,,
[{app_data_module,twoorl_erlyweb_data},{"appname","twoorl"}],
[],[],undefined},
undefined,
{error,
{mysql_result,[],[],0,
>}}]},
{erlyweb,out,2},
{yaws_server,deliver_dyn_part,8},
{yaws_server,aloop,3},
{yaws_server,acceptor0,2},
{proc_lib,init_p_do_apply,3}]
上の自己レスです。
migrationフォルダ(WindowsXPなので)の5つのSQLを実行するとうまく動きました。
session_keyを追加するalter文なども含まれています。
Twoorlとのバージョンの関係なのでしょう。