2009ǯ09��04���Խ�

HTTP::Engine��Data::Model��OAuth��lighttpd�Ȥ���Twitter��Ȥä������Ⱥ�äƥ����������Ƥߤ�

�����ȥ��̤ꡣ����äȴ�ĥ�äƤߤ���
http://commetter.net/ �֤���ä����פǤ���
����Υ����Ȥ˸�����Twitter�ǤĤ֤䤤�ơ�ɾȽ�Ȥ����ۤȤ������礦�����Ǥ���
���������֥å��ޡ����ߤ����ʤ��Ǥ���

�������Ϥ��Ĥ��̤�github�Ǹ�����
http://github.com/hirafoo/commetter/tree/master

����HTTP::Engine�Ȥ�Data::Model�Ȥ�¾�������Τ�ʤ�ʪ��Ȥäƺ�äƤߤ��Τ����ѤǤ������Ǥ⤽��ʬ�ȤƤ��ٶ��ˤʤä��ΤǤ��Ĥ��̤����Ǥ�񤤤Ƥߤޤ���

���줸����⥴����

HTTP::Engine


yappo���󤬺�äƤ�ץ������ȡ�waf�ߤ����ʤ��ʤ�Ǥ�����catalyst��rails�ߤ����˿����Ѱդ���Ƥ�櫓�ǤϤʤ��ơ����������äƴ����Τ�Ρ�sinatra�ߤ����ʤ��Ǥ���

�Ȥꤢ������ư������ץȡ�
script/server.pl

HTTP::Engine�ʰʲ�HE�ˤε�ư�ˤϿ����������ͤ�����HE�Υ��󥹥��󥹺�ä�run��������ʤ�Ǥ������٥��񤭤���Τ�Ƭ�����ΤǴؿ�����
�Ȥꤢ���������������IP�񤯤Τ����ݤʤΤ� http://d.hatena.ne.jp/naoya/20080110/1199944996 ����ˡ��Ȥä�IP�������Ƥޤ���
���ȡ�HE����Ū����ƥ�Ĥ򰷤ä��ꡢ��ư���ɤ߹��ߤ������ꡢ����2�Ĥϳ�ȯ�Ķ��Ǥ����������ꡢ���å���������ʤɤ��Ƥޤ���

���å����Ϥɤ��˻��Ĥ�Ǻ����ΤǤ��������å����ϥե�����˻�������/etc/fstab �˰ʲ����ɵ�����ram�ǥ�������������������˥ե�������֤��Ƥޤ���
tmpfs /tmp/ram/commetter tmpfs defaults,size=64m 0 0

����Ķ������ɤ������Ǥ��礦�͡�
�����Ƥ���ä�memcached�Ȥ�������٤ƥѥե����ޥ󥹤Ȥ��ɤ��ʤ�Ǥ��礦����äȤ⡢DB/APP/CACHE���������Ƥ��̥����Фʾ��ʤɤϻȤ��ʤ���ˡ�Ǥ�����
�ͤ�����1��Υ����ФǤޤ��ʤäƤޤ�����ĥ�ä��ͤ�T41������٥�5��ư���Ƥ�ʤ����äƥ����ФǤ���

����MVCŪ�����֡�������򤷤Ƥߤޤ�������HE��catalyst�ߤ���������ξ��ˤ���pm���ɤ���ꤷ�ʤ��Τǡ���ʬ���ɤޤ���ɬ�פ�����ޤ���
����⼫ư����


lib/Commetter/AppLoader.pm
������ꤷ��Module::Pluggable::Fast���ɤޤ���use���Ƥ�����Ǥ�����ʸ�����򤱤Ƥ�����ͳ�ϸ�ҡ�


������ɤ߹��ߤ⼫ʬ�Ǥ��ޤ�����ʬ�Ǻ�ä�Config::Divide��ȤäƤߤޤ�����
�����catalyst�ߤ����ˡ��١�����������ɲä�������ɤ���Τǡ���äƤ�������ɲä�����Ǿ�񤭤��ޤ���
���̤������١����˺ܤ���DB�ξ���ʤɤγ�ȯ�Ķ������ִĶ��ǰۤʤ�������ɲä�����˺ܤ����ꤷ�ޤ���
����ϡ���ȯ�Ķ���development�����ִĶ���production��̾�Ť��ޤ�������ͳ���ͤ�rails�ߤ�����Ǥ���
�ʤ����ͤ�rails�ϥޥ����졼����󤯤餤�����Ȥ��ޤ���

lib/Commetter/ConfigLoader.pm
config/app/base �ʲ��˥١���������ե���������֤��� config/app/[development|production] �˴Ķ��̤Υե�������֤��Ƥޤ���
Data::Visitor�Dz������Ƥ�Τϡ�����ե�������ˡ�__path_to(hoge)__�פäƽ񤫤줿�ͤ����ä��顢�����ե�ѥ����֤������Ƥޤ���
�����Catalyst::Plugin::ConfigLoader�����ĵ�ǽ�ǡ��������ä��Τǥѥ���ޤ�����
���ץ�����־�꤬/home�ʲ���������/var�ʲ������������ѥ���٥��񤭤��뤳�Ȥʤ��ե�ѥ�������Ǥ��ޤ���


HE��URI�ǥ����ѥå��⤷�ޤ���sinatra�Ϥ��Ƥ���ޤ���
�����HTTPx::Dispatcher��Ȥ��ޤ�����

package Commetter::Web::Dispatcher;
use Commetter::Utils;
use HTTPx::Dispatcher;

connect 'site/'            => { controller => 'Site', action => 'index' };
connect 'site/:action/:id' => { controller => 'Site', };
connect 'site/:action'     => { controller => 'Site', };
connect ':action'          => { controller => 'Root', };
connect ''                 => { controller => 'Root', action => 'index' };

1;

rails��router.rb�ߤ����˽񤱤ޤ���
���졢���Τ褦�˽񤭤�����Ǥ����������񤯤�ư���ޤ���

connect ''                 => { controller => 'Root', action => 'index' };
connect ':action'          => { controller => 'Root', };
connect 'site/'            => { controller => 'Site', action => 'index' };
connect 'site/:action'     => { controller => 'Site', };
connect 'site/:action/:id' => { controller => 'Site', };

�ꥯ�����ȥϥ�ɥ����ޤ�������⼫ʬ�Ǻ��櫓�Ǥ��������������ʤ褦�˺��ޤ���
�㤨�С���rails/catalyst�Ǥ�get/post��Ʊ���᥽�åɤ˹Ԥ��Τ����פȤ�����sledge�Ǥϥ᥽�å�̾��dispatch_�ä��դ���Τ����ݡ�post�θ��get�ѤΥ᥽�åɤ��¹Ԥ����Τ����פȤ�
������������⡢��ʬ�ǥ롼�����Τǹ����ʤ褦�˽���ޤ���
����ϥ�����Ĺ���ΤDz���Τߡ�
����Ū�� /class/method �Υꥯ�����Ȥˤ� class���饹��method ��Ƥӡ�get�ξ���method��post�ξ���post_method��¹Ԥ�����post_method�θ��method��¹Ԥ��ʤ��褦�ˤ��ޤ�����
������ʸ�ˤ����ʬ����Ť餤��
catalyst����äơ�class���饹��auto�᥽�åɤ���äƤ���С�method�¹�����auto�᥽�åɤ�¹Ԥ��ޤ���template��"class/method".tt ��Ȥ��ޤ���
�����ӥ塼��Template�ȤäƤޤ���
���Ȥ�HE�����äƤ����ѥ�᡼���ȡ�HTTPx::Dispatcher�����äƤ����ѥ�᡼����ޡ������Ƥޤ���
�ޤ�����method�ϥϥå����ե���󥹤��֤��褦�ˤ���redirect����������Ф����ͤ˥�����쥯�Ȥ���template����������С������ͤ�ƥ�ץ졼�Ȥ˻Ȥ��ޤ���


����ȥ�����˥����å���ͤ�����ڤϤ��������ڤ��ȿ���������ʤ������ˤҤͤ��٤��٤��ʤΤǡ������å��ϴ��ܥ�ǥ���ͤù��ߡ�����ȥ����������URI�ǥ����ѥå���Ȳ����Ƥޤ���
��Ĥ��������å���ͤ������᥽�åɤ�ͭ��ޤ�����ҡ�


�����դ�Data::Model�β��⡣
�����yappo���󤬺�äƤ��Τǡ�OR�ޥåѤߤ����ʤ�ΤǤ���KVS��ռ����ƺ���Ƥ��ꡢRDBMS��R�ε�ǽ�ϸ��ʳ��Ǥ���ޤ���

Data::Model�ʰʲ�DM�ˤβ���Ϥޤ� http://github.com/tokuhirom/data-model-tutorial/tree/master ��
����������column_sugar��Ȥ��Τ������餷���Ǥ�������������ˤ��Ƥߤޤ�����

sub id {
    column id
    => int => {
        auto_increment => 1,
        require  => 1,
        unsigned => 1,
    };
    key 'id';
}



����ʴؿ���������äơ�

install_model guest => schema {
    id;
    string 'name';
    string 'screen_name';
    foreign_key 'twitter'; # not foreign key, twitter user id
    string 'icon';
    string 'access_token';
    string 'access_token_secret';
    common_columns;
    index 'name';
    schema_options create_sql_attributes => {
        mysql => 'TYPE=InnoDB',
    };
};

����ʴ����ǥơ��֥����������ʴ����������������ä��Τȡ�column_sugar��Ȥä��Ȥ����㤨��sugar��"common.name"�ʤɤˤ����顢���Τޤ��"common_name"�ʤɤȤ���̾���Ǻ����Τ���򤹤���ˡ��ʬ����ʤ��ä��Τǡ������ܤ˥�������pod�ɤ�Ф���ʬ���ꤽ���ʤ�ΤǤ���

���ȡ��쥳���ɤκ���������������ư�����줿���ä��ΤǤ������Ƥߤޤ�����
# auto insert created_at / updated_at
sub update {
    my ($self, $obj) = @_;
    $obj->updated_at(now_c->());
    $self->next::method($obj);
}

my $auto_created_at = sub {
    my $self = shift;
    $_[2]->{created_at} = now_c->();
    $self->_insert_or_replace(0, @_);
};

no warnings 'redefine';
*Data::Model::Driver::DBI::set = $auto_created_at;
now_c�ϸ��߻���򥳡��ɥ�ե���󥹤��֤��ޤ���Utils��������Ƥޤ���
�����������ä����Ȥ����ȡ� http://blog.livedoor.jp/dankogai/archives/50708234.html ���ɤ�Ǥ���������
¿ʬ$tz�ϰ��٤�������Ƥʤ��Ϥ���

�ǡ����Υơ��֥������Ȥä�DB���������櫓�Ǥ�����
�ǡ����١����ϼ�ư�Ǻ�äơ����Ȥ� script/handle_table.pl ��Ȥ��ޤ���
���ץ����� [-create|-delete|-reset] ���ꡢ���줾��ơ��֥�κ���������������˺�����Ԥ��ޤ�����ά���� [-c|-d|-r] �Ǥ⤤���ޤ���
�����ϥǡ����١����κ���������ޤǤ�ꤿ���ä���Ǥ������ǡ����١�����¸�ߤ��ʤ��Ȥ���DBI�ǥϥ�ɥ������ˡ��ʬ����ʤ��ä��Τ���ǰ���ޤ�����
rails�Υޥ����졼�����Ϥɤ���äƤ��Ǥ��硣¿ʬ activerecord/lib/active_record/connection_adapters ��������ɤ��ʬ����Ϥ���

script/create_dummy.pl �Ϥ���̾�ΤȤ�����ߡ��ǡ�����������ޤ��������������Ϥ�äƤޤ���

�ӥ塼�ǤϤ�����������äƤޤ��󡣥�åѡ����餤�Ǥ��礦����
rails�ߤ��ͤ�rails��link_to���Ȥ������ä��Τǡ�Template::Plugin::LinkTo��Ȥä�Ʊ̾�Υޥ�����äƤޤ���
�ͤ�html/css�ʤɡ�������ӥ塼����ǽ�Ϥϲ���Ū�ǡ�����Ū��html/css�����������٤Ǥ���
�ƥ�ץ졼�Ȥϳ�������ե꡼�ʤΤ�õ���Ƥ��ޤ�����������Ϥ�٤����Ȥ����ϼ�ʬ�Ǻ��ʤ���Фʤ餺����ϫ���ޤ�����
�ץ���������٤������˹Կ��Ͼ��ʤ���Ǥ�������äѤ��̤�����ƤǤ��͡�


Twitter�ȤΥǡ���Ϣ�Ȥˤ�Net::Twitter��ȤäƤޤ���ǧ�ڤˤ�OAuth��
�ͤ�������OAuth�κǤ��ɤ��Ȥ����ϡ��ͤ�DB�˥桼���Υѥ���ɤ�����ʤ��ƺѤळ�ȤǤ���
����ʽ��פʥǡ���������������ޤ���OAuth��Ȥ��С��ѥ���ɤ�������Ȥ�桼����Twitter�ؤΥݥ��Ȥ��ͤΥ����Ȥ��̤��ƹԤ碌��줿�ꤷ�ޤ���
����ǧ�ڤκݡ����å�������ߤκ�Ȥ򤹤�Τǡ�������������ȥ�����˥����å���񤤤Ƥޤ���
��ǥ�˻��äƤ����������ޤ�����������ޤ�򤷤��ʤ����������פ��դ��ʤ��ä��Τ��פ����ʤ���

�ͤ�web���ץ����ݤϡ����ޤǤ��äȥե���Ȥ�apache/�Хå���modperl�Ȥ����������ä���Ǥ���������lighttpd��ȤäƤߤޤ�����
����������ͳ�ϡ��Ȥä�����̵���ä��Τǻ�����ä���modperl���ڤ��餷�����顢�Ȥ�����Ρ�
�����������ͳ�ϡ����ץ��modperl��ư�����ʤ��ä��Ȥ�����Ρ�������
���Τˤϡ�ư���������ɡ��ꥯ�����Ȥ�����뤿�Ӥ�Commetter->setup���ƤФ�Ƥ��ޤ��ޤ���������ʤ��cgi��

����ե������ http://perl-users.jp/modules/http_engine.html �Ȥۤ�Ʊ���Ǥ���
�㤦�Τϡ���ư���˴Ķ��ѿ����ɤߡ�production�Ѥ�������ɤߤ˹Ԥ��Ȥ������餤�Ǥ���
����listen�ݡ��Ȥޤǻ����Ƥޤ���������wan¦�ˤ϶����Ƥʤ��Τǡ��֥Хå��Υץ�����������ˤ�ǤäƤ��פȤ����̤��ޤ���
���䡢����ˤ�����̤˿���ä������ǻ��Ǥ��ޤ������Ǥ������ץ���������Ŭ�ڤ��ͤ�ʬ����ʤ��ä��Τǡ��Ȥꤢ�����Ǿ�������Ȥ��10�Ĥǡ�


���ơ���������ˤʤäƤʤ����⤷�ޤ��������դǡ�
¾�ˤⲿ���������ٹ����Ƥޤ���������Ū�˴�ȴ�ʤ��ȤϤ��Ƥޤ��󡣤Ȥ���������ޤ���

���ۤȤ��Ƥϡ�web���ץ��äƤ�Ȥ������waf��äƤ봶���Ǥ�����
���Ϥ�ϡ����줳������ʬ���餺��HE��DM��ɤ���äƻȤ��Τ����äѤ�Ǥ������Ǥ⡢��äѤ꼫ʬ��Ĵ�٤ʤ��饳���ɽ񤤤ƿ������μ���Ȥ��դ���Τϳڤ����ä��Ǥ���
�ͤϻȤ�¦�˵�뤰�餤�����Ǥ��ޤ��󤬡�����ʤ�κ�ä��㤦�ͤϳ������Ǥ��͡�
�ۤ�Ȥϥ�Х����б���ͤ��Ƥ��Ǥ���������������ͽ���������Ķ���Ƥ�Τǡ����ä��󤯤��äƻ����Ƥߤޤ�����
HE��DM�Dz������ͽ��ǤϤ��ޤ������������ޤǺ�ꤳ��ȤϹͤ��Ƥޤ���Ǥ��������ٺ��Ϥ᤿�顢����⤳���ĤäƤʴ����ǿ����Ĥ�夬�äƤ��ޤä���
3����ꥢ�б��Υ�Х��륵���Ȥ���ǽ�ϤϤ���ޤ�����������ͤ��켰��docomo�������äƤʤ�����iphone�ϰ��ä����Ȥ�̵�������ͤΥ��������������⤬���2000�ߤ��礤�ʻ��Ǥ���


DB�߷פǴ��������������Ȥ����ͥ��Ϥޤ����������Ǥ������Τ����񤭤ޤ���
����⥢�ɥХ������줿���οͤο��˴��ա��������٤ۤ���ٶ��ˤʤ�ޤ���

����ǤϤ�����ͤǤ�����
�㤤�Ƽդ�ޤ�dis��줿���Τǡ�������Ҥǻ����Ƥߤ���ˤ��ޤ���


Posted by hirafoo at 04:02��Comments(0)��TrackBack(0)�� ��perl 

���ε����ؤΥȥ�å��Хå�URL

�����Ȥ���

̾��
 
  ³¨Ê¸»ú
 
 

'); label.html('\ �饤�֥ɥ��֥����ǤϹ���Υѡ����ʥ饤�������¬��Τ��᥯�å���(cookie)����Ѥ��Ƥ��ޤ���
\ ���ΥХʡ����Ĥ��뤫�������³���뤳�Ȥǥ��å����λ��Ѥ�ǧ������������ΤȤ����Ƥ��������ޤ���
\ �ޤ��������ͤ����ҥѡ��ȥʡ���Ȥˤ��������μ�³���ˤ�ꡢ���å����λ��Ѥ�������뤳�Ȥ�Ǥ��ޤ���
\ �ܺ٤��饤�֥ɥ����ѵ���򤴳�ǧ����������\ '); banner.append(label); var closeButton = $('