git pushでdeployな生活をつくる方法
時間が時間なので、さくっと。
gitでpushするとdeploy、というgitでソースコードなど管理してる場合にはかなりお手軽な反映方法なんだけど、その方法が綺麗にまとまってなかった。試行錯誤しつつようやく出来上がったのでメモとして残しておく。
作業した環境は、さくらVPS上のdebian。debianの導入周りとかはやってる人もおおいので割愛。
gitユーザをつくる
adduser --disabled-password git
su - git
リモートのgitリポジトリをつくる
mkdir ~/repos cd ~/repos mkdir Hoge.git cd Hoge.git git init --bare vim hook/post-receive #次の一文を足す (cd /home/git/www/Hoge; git --git-dir=.git pull) chmod +x ~/repos/Hoge.git/hooks/post-receive
deploy先をつくる
cd ~/ mkdir www/ cd www git clone ~/repos/Hoge.git
dotcloudでmixiアプリをつくる
さくらスタンダードプラン上にTengをいれるほうほう
Amon2ついでにTengいれようとしたら、sqlがどうもsyntax error起こしているようで入らない。sqlite3がそもそもさくらに入っていなかったので、それが原因かと思っていれてはみた。
wget http://www.sqlite.org/sqlite-amalgamation-3.7.2.tar.gz tar xvfz sqlite-amalgamation-3.7.2.tar.gz cd sqlite-amalgamation-3.7.2 ./configure --prefix=$HOME/local make make install
が、それでも無理だった。念押しで初期状態で入ってるDBD::SQLiteをcpanmで入れてみたけどそれでもダメ。SQL::Makerのバージョンも最新で特に問題はなさげ。こうなるとローカルではすんなり入ったTengをいじらねばなるまいかと、仕方なく、
cpanm --look Teng
で、あっさりと問題は解決。
- lib/Teng.pm
sub _insert { my ($self, $table_name, $args, $prefix) = @_; - $prefix ||= 'INSERT'; + $prefix ||= 'INSERT INTO'; my $table = $self->schema->get_table($table_name);
- lib/Teng/Plugin/Replace.pm
sub replace { my ($self, $table_name, $args) = @_; my $table = $self->schema->get_table($table_name); for my $col (keys %{$args}) { $args->{$col} = $table->call_deflate($col, $args->{$col}); } - my ($sql, @binds) = $self->sql_builder->insert( $table_name, $args, { prefix => 'REPLACE' } ); + my ($sql, @binds) = $self->sql_builder->insert( $table_name, $args, { prefix => 'REPLACE INTO' } ); $self->_execute($sql, \@binds, $table_name);$
insertのほうはprefix渡さなければ大丈夫なんだけど、replaceはそうもいかない。にしてもなぜコケるのかがわからない。やはりsqliteのバージョン問題なのかな。
Amon2をさくらスタンダードプラン上に設置する
ちょろちょろと作業しつつ、なかなか動かないので面倒で放置してたけど、気合いれて動かしてみた。予めローカルで作成しておき、ひと通りできたところで転送という形。
ローカル編
cpanm --mirror http://orepan.64p.org/ Amon2
amon2-setup.pl Hello
さくらスタンダードプラン故の宿命で、とりあえずextlibを掘って、そこに依存モジュール突っ込む。installdeps使ってみたけど、うまく入らなかったので只管errorlogとにらめっこ。
plackup -r app.psgi mkdir extlib cpanm --force -l ./extlib/ Foo::Bar
ひと通りファイルが入ったところで、app.cgi作成。もちろんこれも一筋縄ではうごかないので、とりあえず動くまで入れる。
#!/usr/bin/perl use lib qw(./extlib/lib/perl5); use strict; use warnings; use utf8; use Plack::Loader; use Plack::Util; use Path::Class qw(dir); my $psgi_path = dir("home", "bar"); my $app = Plack::Util::load_psgi('/'.$psgi_path.'/app.psgi'); Plack::Loader->load('CGI', port => 5000 )->run($app);
URLにこだわりたかったので、htaccessも追加。
RewriteEngine On RewriteCond %{REQUEST_URI} !^/app.cgi RewriteRule ^app.cgi - [L] RewriteRule ^(.*)$ app.cgi/$1 [QSA]
そしてHelloディレクトリ丸ごとさくらにあげる。
さくら編
とりあえず、ローカルでやったように、動くまで確認する。
cd ~/www/Hello/ cpanm --force -l ./extlib/ Foo::Bar
さくらスタンダードプランは、当日のエラーログをみるためには管理画面へアクセスしなければならないという面倒仕様なので、ブラウザとにらめっこしながらコンソール叩く。
Xcode4に上げた状態でppcサポートが入ってるCPANモジュールを入れる方法
訂正
ログ見直したところ、YAML::Syckは該当してませんでした。早とちりしてたようです。あと、環境設定とバージョンによっては記述が含まれてないようで(設定弄って入れなおしてみたら含まれてなかった)、実際にこけたら対処するのがいいのかも。
-arch ppc
が入っているモジュールの場合、Xcode3からXcode4に上げた時点でppcサポートがなくなるため、testの段階でこけるようになる。
Makefileに修正いれればこけなくなるけど、毎回ppcサポート入ってるモジュールにそれをするのも面倒な場合は、Xcode3を別ディレクトリに入れる。その際にSDK関係のファイルは入れなくても問題ない。
MacBookAirを使ってAriakeWalkerの設定を行う方法
Windowsでのやりかたはあちこちに溢れてるんだけど、わりとmacでのやり方が見つからなかったので、今後の備忘録も兼ねてメモしておく。転送先デバイスはGalaxy Tab SC-01C。
作業自体はTerminalにて。予めhomebrewを入れておく。
コミケカタログCD内のデータを編集するのに必要なコマンドを入れる。
brew install nkf brew install sqlite
- CCATALOG79.DB
- C079CUTH.CCZ
- C079CUTH.CCZ
を適当な場所に置いて、
sqlite3 CCATALOG78.DB .dump | nkf -Es -Sw -Lu | sqlite3 CCATALOG78_3_u.DB mv C079CUTH.CCZ C079CUTH.zip mv C079CUTL.CCZ C079CUTL.zip mkdir H L unzip C079CUTH.zip -d H unzip C079CUTL.zip -d L
あとはSDカード直下に、AriakeWalker\C78\とディレクトリを作って、その中に
- CCATALOG78_3_u.DB
- H
- L
を投下。ファイルに転送にはsmbよりもBluetoothを使うほうが、手間掛からないかもしれない。
Yacafiの動作を読み解く3
http://d.hatena.ne.jp/hao_yayoi/20100827/1282843571:titlle=Yacafiの動作を読み解く2より引き続き
86 〜 95行目
86 $yacafi =~ s/### NO PACK\n.+?### NO PACK END\n//sg; 87 $yacafi =~ s/\n__END__\n.+$//s; 88 $yacafi =~ s/'\.\$CURRENT_CLASS\.'/$CURRENT_CLASS/g; 89 $yacafi =~ s/\$CURRENT_CLASS/$CURRENT_CLASS/g; 90 91 my $global = ''; 92 for my $code ( $yacafi =~ /### GLOBAL\n(.+?)### GLOBAL END\n/sg ) { 93 $global .= $code; 94 } 95 $yacafi =~ s/### GLOBAL\n(.+?)### GLOBAL END\n//sg;
引き続きYacafi.pmのソースコードを置換する処理。Yacafi.pmの中身の殆どがメタプログラミングのためのものというのがよくわかる。
97 〜 104 行目
97 my $cgi = _read_file( ( caller(1) )[1] ); 98 $cgi =~ s/use (?:Yacafi|strict|warnings).*?;\n//sg; 99 $cgi =~ s/\$Yacafi::/\$/g; 100 101 my $shebang; 102 if ( $cgi =~ s/(\#\![^\n]+)//s ) { 103 $shebang = $1; 104 }
今度は、use Yacafiで実際に書いていたソースコードを対象にした置換作業。98行目でuseしてた行を消し、99行目でYacafiのグローバル変数名から名前空間部分を消す。102行目にてシェバン(UNIXのスクリプトの#!から始まる1行目)があればそれを変数に保持。
次はtemplate_builderなんだけど、多分これが一番手が込んでる感じなので、とりあえずここまで。