RhodeCodeのhgのコミットメッセージが文字化けしていたのを直す。

githubクローンのgitlabを挫折した人が、bitbucketクローン?をRDBMSでRhodecodeを導入してみた
でRhodecodeを導入して、紆余曲折ありましたが、mercurialで運用しています。

で、コミットメッセージが日本語だと化けて、何が原因かなぁーとか思ってたんですが、以下で直りました。

export HGENCODING="UTF-8"

node-postgresのgithub wikiを訳しました。

お仕事でnode.jsでPostgreSQLを使おうと思うところがあったので、Wikiの内容を訳しました。
例によってレベルが低いので、おかしい部分は指摘ください。

https://github.com/dai-yamashita/node-postgres/wiki

herokuとかでPostgreSQL使うの、これで便利になりますね!!(そんなわけないか。。。)

今回は、Wikiの内容をgit cloneして、poファイルを作って翻訳ソフトで訳す形で進めたんですが、
Wikiの内容をbranchしてどうこうってのも微妙だなぁーってことで、とりあえず、手で貼り付けるというローテク。。。
po4a使ってます。

# poファイル作成
po4a-updatepo -M UTF-8 -f text -o markdown -m ./pg.md -p ./pg.md_ja.po

# poファイルと元ファイルから翻訳済みファイル作成
po4a-translate -f text -o markdown -m readme.md -M UTF-8 -p ja.po -l readme_ja.md

みたいな感じです。結構便利ですね。po4a。逆にgettextもう使い方忘れたw

ファイル多いんでfindコマンドでバーって作って戻すみたいなことも。

# まとめてpoファイル作成
find -maxdepth 1 -name "*.md" -print0 |xargs -i -0 echo "po4a-updatepo -M UTF-8 -f text -o markdown -m {} -p {}_ja.po"
# まとめてpoファイルと元ファイルから翻訳済みファイル作成(雑)ちゃんと書け。。。
find -maxdepth 1 -name "*.md" -print0 -type f |xargs -i -0 po4a-translate -f text -o markdown -m {} -p {}_ja.po -l ./translate/{}

みなさんこーいうのどうやっていってるんでしょうか?githubでちゃんとバージョン管理するんですよね。。。やっぱり。。。
是非教えてくださいませ。。。

こんなんでも、node.js界隈のお仲間に入れてもらえたりすると嬉しいです。。。(´-∀-`;)
いろいろ取り組んでいきたいと思います。

Office365のLyncをLinux環境のクライアンで接続する(pidgin)

誰得な記事です。まぁ、自分の備忘録。

GoogleApssでなくて、Office365を使用しました。
結構便利です。安定のMSクオリティでデザインも。(ry

詳しいことは、Office365のHPでどうぞw(まわし者ではありません。)
http://www.microsoft.com/ja-jp/office365/what-is-office365.aspx

今は、プランP1です。(30日間無料体験できるので、みんな使ってみるといいと思うよ!!)
ちなみに、もともとGoogleAppsのひとだったりしますw

で、結構やり取りに大事なのが、Lync2010なんですが、MSさんからクライアントって、
当たり前のWindowsさんとMacさんなんですよねー。

メイン環境をLinuxにしたこともあって、これ困った。そのために仮想環境たちあげてましたが、
やっぱりいろいろやりにくい。。。助けてぇーグーグル先生―っと結構いろいろやってましたが、
どーやら、pidginだと対応している模様。そこにsipeと組み合わせますよっということまでは、わかりました。

yum install -y pidgin
yum install -y pidgin-sipe

で、そこからGoogleのXAMPPはすぐに登録できて、さぁ、本題と思ったんですが、office365になかなか繋がらない。。。
設定方法がわからなくて、すごく悩みました。。。
office365上のドメインDNS参照したり、SSOの設定外すのか、外さないのか。。。特にネット上に多かったのは、
接続方式、「SSL/TLS」で、認証方式が「NTLM」でした。
これだと、認証ホント繋がらないんですよねー。。。

で、だいぶかかってたどり着いたのが、以下
http://community.office365.com/en-us/forums/166/t/6903.aspx

Username: me@mydomain.com

Login: me@mydomain.com

Auth Scheme: TLS-DSK

User-Agent:

UCCAPI/4.0.7577.314 OC/4.0.7577.314 (Microsoft Lync 2010)

UCCAPI/4.0.7577.256 OC/4.0.7577.280 (Microsoft Lync 2010)

Servers:

pool1.oconline.microsoftonline.com:443

sipdir.online.lync.com:443

and i have also set this:

$ printenv | grep NSS

NSS_SSL_CBC_RANDOM_IV=0

これを参考に、自分で設定した内容は以下になります。


[基本]

プロトコル Office Communicator
ユーザー名 office365に登録しているメールアドレス
login office365に登録しているメールアドレス
パスワード : office365のパスワード

[拡張]

server:[port] sipdir.online.lync.com:443
接続方式 自動
ユーザーエージェント UCCAPI/4.0.7577.314 OC/4.0.7577.314 (Microsoft Lync 2010)
認証方式 TLS-DSK
シングルサイオンを利用する チェックを外す(使用しない)

まだ、Videoチャットとかは試してないけど、テキストのIMはなんにも問題ありませんでした。
これからの時代は、LinuxがクライアンOSで、Officeをクラウドで使う時代ですねwww
すいません。WindowsWindowsで必要だと思います。ちょっと言ってみたかっただけです。。。(_ _;)

rhodecodeでgit clone/pushが出来なかったけど、出来るようになって( ゚Д゚)ハァ?

昨日の構築したrhodecodeで、リポジトリを作ってテストまで終わらせたのに、今日やると、できない。。。( ;∀;)

なんで??って調べまくってたらこんな時間。。。orz そしていまはその状況が変わって直ってる?んだけど、その記録。

症状: Linuxで一般ユーザーだと、git clone / push ができない。

(windowsだとcloneはできるけど、pushができない)

gitでhttp経由でいろいろやりたいのが目的。(ローカルなので、セキュアより運用が楽なのが。。。)

git clone http://dai_yamashita@server.gtld/repos1

みたいにすると、プロンプトが出てきて、

Cloning into 'tech_note'...
Password:

ってなってパスワード入力して、cloneされます。(本来であれば)

それが、一般ユーザーだと、

Cloning into 'tech_note'...

とパスワード入力画面が出てこない。。。
rhodecodeサーバ側で80ポートをtcpdumpしたら、なんのパケットも飛んできていない。。。

ちなみに特権(root)だと問題なく、動作します。
tcpdump上にもしっかりとパケット出力。
(Windowsだと、push時に表示されるダイアログに正しいパスワードを何度入力しても、エラーが表示される。)

そこで、Windowsのclone時にユーザー名付きのURLじゃない状態にすると、

git clone http://server.gtld/repos1

ファイル追加、コミット、pushなんてのも問題なく、できて、おぉーユーザー名付きURLだとダメなのかぁ―。。。
Linuxでも、一般ユーザーでcloneやらpushができるようになりました。

そして、今この時間は、LinuxでのウインドウマネージャーはKDE使ってるんですが、

git clone http://dai_yamashita@server.gtld/repos1

ってやると、最初のうちは、KDEウォレットが立ち上がりパスワードを入力するようになり、
問題なく、cloneができるよう。。。

rootに切り替えると、

Cloning into 'tech_note'...
Password:

ってでてきた。。。

そこからは、一般ユーザーでcloneはできるんですが、パスワードが聞かれなくなり。。。
よくわかりません。。。

どなたか、gitのプロトコル経由や、ユーザ名付きURLだとみたいなことありましたら、ご教授ください。。。
(rhodecode側だよね。。。と思いたいんですが、tcpdumpしたしなぁー。。。)

githubクローンのgitlabを挫折した人が、bitbucketクローン?をRDBMSでRhodecodeを導入してみた

gitlabの環境を構築はしてみましたが、いざクライアント側からpushさせようとか思うと、
うまく行かなかったんですよねぇー。。。つД`)・゚・。・゚゚・*:.。..。.:*・゚
だいぶ調べたけど、ダメでしたw じゃあ、使わないってわけには行かないので、githubクローン?
(どっちかっていうと、bitbucketクローンじゃね?)のrhodecodeを導入してみた際のお話です。

rhodecodeさんは、gitだけじゃなくて、hgも使えます。マルチな方ですねぇーw
hgの方がbitbucketで慣れてるんで、浮気しそうになりますが、ここは、ブームに乗って何とかgitをものにしたいw

バックエンドのDBは、SQLite/PostgreSQL/MySQLで利用可能です。
SQLiteを使うともっと簡単ですが、あくまでPostgreSQLで運用します!!(゚д゚)!(gitlabもPostgreSQLで作りましたよー)

自分の中のいつもの構成で、OSはScientific Linux6.3 インストール時に開発環境のみのBasic Serverです。
ntpとかは、事前にcronで行うような設定が入ってますが、今回は記載省略。

PostgreSQLはソースコンパイルで導入するポリシーなので、

インストール:
/usr/local/pgsql/${pgsql_version}/

データベースクラスタ:
/home/postgres/${pgsql_version}/data

でインストール済みとなっております。

ちなみに、rhodecodeさんは、マニュアルが非常に充実してます!!ココ!!
これ見ながらやれば基本問題ないですが、メモとして。。。
他にも参考サイトを出します。上記のマニュアルと、その参考サイトをミックスしただけと言われるとそれまでなんですが(^_^;)
rabbitmqとceleryのメッセージ関係の処理は入れていません。( ー`дー´)キリッ
(一回やったけど、運用面倒だし、すぐに動かなかったし。。。少人数だし、必要ないw)

http://mbrownnyc.wordpress.com/technology-solutions/rhodecode-and-redmine/
http://mbrownnyc.wordpress.com/technology-solutions/rhodecode-and-redmine/part-1-prerequisites/
http://mbrownnyc.wordpress.com/technology-solutions/rhodecode-and-redmine/part-2-install-rhodecode/

まずは、上記のprerequisitesを参考に、必要なモジュールをインストールと、ローカル環境での使用なんで、環境構築時の問題切り分けとしても、iptablesSELinuxを止めるという。。。
(まぁ、disabledにしちゃってます。。。ハイ。。。)あと、epelリポジトリの導入。

yum install -y python-devel

setenforce 0
vim /etc/selinux/config 
# SELINUX=disabled

/etc/init.d/iptables stop
chkconfig iptables off

#epel6の導入
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ivh epel-release-6-7.noarch.rpm

ユーザーの作成(上記参照にpasteって人にしてます)

useradd paste
#ユーザー切り替えて確認
su - paste
whoami 
id paste
exit

で事前準備終了〜。
次に導入フェーズです。今度は、上記のpart-2-install-rhodecodeと、マニュアルのsetupを参考に進めます。
今からだと、pipだろうということで、easy_installでは実施していませんw

# pipのインストール
yum install python-pip

# virtual environmentの導入
pip-python install virtualenv virtualenvwrapper

su - paste
mkdir /home/paste/.virtualenvs
exit
su paste
echo >> /home/paste/.bashrc
echo export WORKON_HOME=\$HOME/.virtualenvs >> /home/paste/.bashrc
echo source /usr/bin/virtualenvwrapper.sh >> /home/paste/.bashrc
source /home/paste/.bashrc
#some virtual environment should be created /home/paste/.virtualenvs
ls -l -a /home/paste/.virtualenvs/
exit
mkdir -p /var/www/rhodecode-venv /var/www/rhodecode
chown paste:paste /var/www/rhodecode-venv /var/www/rhodecode
su - paste
virtualenv --no-site-packages /var/www/rhodecode-venv #create the virtual environment for rhodecode
/var/www/rhodecode-venv/bin/pip install rhodecode #install rhodecode accessible through the virtualenv
exit

ここらでrabbitmqとceleryの手順になりますが、今回パス。(epel入ってると簡単にyum一発でイケます)
PostgreSQLとの連動の為のモジュールを導入します。どーやら、psycopg2を使う模様。

su - paste
# DBモジュールの導入
# ソースコンパイルでの導入なので、exportしてやらないと、pg_configがないって怒られます
export PG_CONFIG=/usr/local/pgsql/9.2.1/bin/pg_config
export PATH=$PATH:/usr/local/pgsql/9.2.1/bin
/var/www/rhodecode-venv/bin/pip install psycopg2
exit

# DBの作成(横着してrootから実行)
su - postgres -c "/usr/local/pgsql/9.2.1/bin/createuser rhodecode"
su - postgres -c "/usr/local/pgsql/9.2.1/bin/psql -c 'alter role rhodecode createdb;'"
su - postgres -c "/usr/local/pgsql/9.2.1/bin/createdb rhodecode -U rhodecode"

Rhodecodeの構成設定関係

su - paste
/var/www/rhodecode-venv/bin/paster make-config RhodeCode /var/www/rhodecode-venv/production.ini

構成設定は量が多いので、変更したとこを省略形式で。。。

#vim /var/www/rhodecode-venv/production.ini

[DEFAULT]
email_to = rhodecode@localhost # コメントを外して環境に合わる
error_email_from = paste_error@localhost # コメントを外して環境に合わる
app_email_from = rhodecode-noreply@localhost # コメントを外して環境に合わる

smtp_server = localhost

[server:main]
host = 0.0.0.0 # 127.0.0.1からすべて受付に変更

#########################################################
### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG    ###
#########################################################

# SQLITE [default]
#sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db # コメントにして

# POSTGRESQL
# 本来はuser:pass@ですが(ローカルだからと甘えて、trustで動かしてるので、パスワード設定なし)
sqlalchemy.db1.url = postgresql://rhodecode@localhost/rhodecode 

# MySQL
# sqlalchemy.db1.url = mysql://user:pass@localhost/rhodecode

# see sqlalchemy docs for others

・・・

MySQLな人は、コメント解除を変更して、MySQLの設定を書くといけると思います。(ほぼMySQLは詳しくないw)

リポジトリ保管用のディレクトリを作成(データ領域はhomeにしたいので、/home/reposにしました)

mkdir /home/repos
chown paste:paste /home/repos/

んで、DBを作成します。ここでは、マニュアルを参照して対応。おっと。。。エラーが。。。

/var/www/rhodecode-venv/bin/paster setup-rhodecode /var/www/rhodecode-venv/production.ini --user=admin --password=input_password --email=mail@mail.domain.gtld --repos=/home/repos
・・・
from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: libpq.so.5: cannot open shared object file: No such file or directory

えーと、libpq.so.5: cannot open shared object file: No such file or directoryですよっと。
ソースインストールなので、ライブラリの検索パスはそりゃないな。。。
こちらに詳しく書かれているので、そちらを参照。Cannot Open Shared Object Fileの対処

以下で対応

# vim /etc/ld.so.conf.d/postgresql.conf

/usr/local/pgsql/9.2.1/lib
ldconfig
ldconfig -p |grep libpq #確認

上記で通っているのが確認できたら、

su - paste
/var/www/rhodecode-venv/bin/paster setup-rhodecode /var/www/rhodecode-venv/production.ini --user=admin --password=input_password --email=mail@mail.domain.gtld --repos=/home/repos

# ずらずらSQLが流れます。
・・・
exit

もうすぐ、起動。やっぱり自動起動ですよねーってことで、initスクリプトの為のトラップとログの準備

mkdir -p /var/run/paste/
touch /var/log/pasteserve.log
chown paste:paste /var/log/pasteserver /var/run/paste/

んで、initスクリプト(まんまコピー)

# vim /etc/init.d/paste-serve-rhodecode

#!/bin/sh
#
#
#
#
# chkconfig: 345 82 03
# description:
#init script for paste serve rhodecode, which was written by
#branded on freenode
#mbrownnyc everywhere else
#

### BEGIN INIT INFO
# Provides:          paste-serve-rhodecode
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Description:       Paste httpserver to serve rhodecode over http
### END INIT INFO

  start()
  {
        if [ ! -f /var/run/paste/rhodecode.pid ]; then #process isn't running probably
                echo Attempting to start paste serve rhodecode...  daemonizing
                su -c '/var/www/rhodecode-venv/bin/paster serve /var/www/rhodecode-venv/production.ini --daemon --user=paste --pid-file=/var/run/paste/rhodecode.pid --log-file=/var/log/pasteserve.log' paste
                while [ ! -f /var/run/paste/rhodecode.pid ]; do sleep 3 && echo .; done
                echo Done. PID is $(cat /var/run/paste/rhodecode.pid).
        else
                echo The paste serve rhodecode has filed a paste PID $(cat /var/run/paste/rhodecode.pid)
                echo It\'s likely started already at that PID.
        fi
  }
  stop()
  {
        if [ -f /var/run/paste/rhodecode.pid ]; then #process is running probably
                echo Telling daemonized paste httpserve process to die
                su -c '/var/www/rhodecode-venv/bin/paster serve --stop-daemon --pid-file=/var/run/paste/rhodecode.pid' paste
                echo Waiting for process to die...
                while [ -f /var/run/paste/rhodecode.pid ]; do sleep 1 && echo .; done
        else
                echo /var/run/paste/rhodecode.pid doesn\'t exist, so the paste httpserve process was not used to executed using the proper config, if paste is running.
                echo Otherwise it isn\'t running.
        fi
  }
  restart()
  {
        stop
        start
  }
  status()
  {
        if [ -f /var/run/paste/rhodecode.pid ]; then
                echo paste httpserve process is running as PID $(cat /var/run/paste/rhodecode.pid)
                su -c '/var/www/rhodecode-venv/bin/paster serve /var/www/rhodecode-venv/production.ini --status --pid-file=/var/run/paste/rhodecode.pid' paste
        else
                echo paste serve rhodecode isn\'t running.
        fi

  }

case "$1" in
    start)
                start
    ;;
    stop)
                stop
    ;;
    restart)
                stop
                start
    ;;
    status)
                status
    ;;
    *)
                echo $"Usage: $0 {start|stop|restart|status}"
        ;;
esac
exit 1
[esc]wq![enter]

もう残りわずか!!自動起動設定

chkconfig --add paste-serve-rhodecode
chkconfig --level 345 paste-serve-rhodecode on

んで、起動。

touch /var/log/pasteserve.log
chown paste:paste /var/log/pasteserve.log
service paste-serve-rhodecode start
ls -l /proc/ | grep $(cat /var/run/paste/rhodecode.pid) # the owner should be paste

ポートがデフォルトだと5000での起動なのと、使わないけどw httpsのことも考えておいて、
バースプロキシ立てますか。ということで、マニュアル参照。https-support
Nginxとかいろいろ考えたけど、無難にapacheでvhostでの運用にしました。

yum install httpd

#vim /etc/httpd/conf/httpd.conf
# 最終行に以下を追加
include /etc/httpd/conf/virtualhost_rhodecode.conf

んで、同じ内容を記載。(環境に合わせてくださいませm(_ _)m)

# vim /etc/httpd/conf/virtualhost_rhodecode.conf

<VirtualHost *:80>
        ServerName hg.myserver.com
        ServerAlias hg.myserver.com

        <Proxy *>
          Order allow,deny
          Allow from all
        </Proxy>

        #important !
        #Directive to properly generate url (clone url) for pylons
        ProxyPreserveHost On

        #rhodecode instance
        ProxyPass / http://127.0.0.1:5000/
        ProxyPassReverse / http://127.0.0.1:5000/

        #to enable https use line below
        #SetEnvIf X-Url-Scheme https HTTPS=1

</VirtualHost>
/etc/init.d/httpd start

起動したァーってこれでなります。
ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

使い方は以下を参照ください。
管理者のログインは、DB作成時の引数になります。(ノ∀`)アチャーって方は、
httpdとpaste-serve-rhodecode stopさせてやり直すか、管理者画面で修正してください。↓これです。

/var/www/rhodecode-venv/bin/paster setup-rhodecode /var/www/rhodecode-venv/production.ini --user=admin --password=input_password --email=mail@mail.domain.gtld --repos=/home/repos

使い方は、以下を参照するとまとめられてます。そして全く同じ問題に遭遇wGitとRhodecodeの罠(履歴とかコメントとか表示されない)
Rhodecodeの使い方とGitの問題と

fedoraのgit最新とか持ってきたけど、gitって依存モジュール結構あって大変でしたので、素直にrpmforgeを導入して対応。

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 

こわいんで、rpmforgeのリポジトリは標準で使わないように変更。

# vim /etc/yum.repos.d/rpmforge.repo 

[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0 # < enable = 10に変更

んでインストール

yum --enablerepo=rpmforge-extras install git

完璧!!ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

最初ちょっとハマったのは、リポジトリ作成画面で、
「ADD NEW REPOSITORY」画面で「clone from:」って絶対入れないとイケないとか思い込んでた自分が恥ずかしい。。。
cloneして作成しなければ、何もいれずに作成すればいいという。。。当たり前体操〜☆(*´ω`*)

gitlabよりマニュアルそれってますし、運用も楽ですね。
個人的には圧倒的にこちらの方が使いやすいです。

誰かマニュアルを日本語訳にしていたような。。。|д゚)チラッ

少人数だったらbitbucket使っとけよとか言わないように。。。( ̄ b ̄) シーーッ!!

気が向いたら画面貼ります。終わり。

Sublime Text2を使い始めてみた。(Linuxでの日本語入力できるようにした)

いろいろ悩んでいたエディタですが、Sublime Text2に落ち着きそうです。http://www.sublimetext.com/

基本環境がLinuxなんですが、全OS環境で使えるのがいいなぁーっていうのもあったり、
使用したい言語の対応がなかったりと、最低限満たしてくれるものというと、VimであったりEmacsなんですが、
そんなに出来る子じゃないので、サーバの最低限の設定が出来ればいいんだよ。この子たちは。っていうのがあって。
(あんまり便利にしちゃうとサーバ入ったときにいろいろ不便で入れたくなってしまう病(別名:発作)が発生するので。。。)

ですが、この方、Linux環境(ibus)での入力に対応しておりません。(日本語入力できない)
でも改善方法がわかったので、使うことにしました。
http://www.tipiweb.tk/blog/2012/06/16/little-simple-way-to-use-ibus-in-sublime-text-2/
(githubだと、https://github.com/xgenvn/InputHelper

ここで、sublimetext2を起動したことがあると、homeのユーザー配下に.configができてます。
んで、上記のInputHelperをcoloneしますよっと。(まぁ、ページ通りですが。。。)

cd ~/.config/sublime-text-2/Packages
git clone https://github.com/xgenvn/InputHelper.git

で、Ctrl+Shift+Zを押すと、

入力ダイアログがあらわれて、日本語入力できるようになります!!(日本語問題クリアーヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ)
で、Ctrl + Enterで入力されます。

あとは、いろいろなパッケージ管理を追加するために、package_control導入すると便利とのことなので、

日本語キーボードだと、Ctrl+Shift+@ を押して、
http://wbond.net/sublime_packages/package_control/installation を参考に、

import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'

をします。

あとは、もうカスタマイズし放題なので、好きにしてください。

以下を参考にしました。(使い方の勉強も含めて。。。)
http://qiita.com/items/41b2a6646e4f36de09bf
http://mnemoniqs.com/web/sublimetext2/
http://miha5.com/2012/09/2507/
http://qiita.com/items/b1704269a36bc7e99840

まだまだ、使いこなすレベルにはなっていませんが、キレイだし、イイ環境になってます。

LuaでPostgreSQLに接続(libpqベース)

LuaでDB接続といえば、LuaSQL(ODBC)が有名だと思うんですが、PostgreSQLに接続するんだったら
やっぱりlibpqベースだよねぇーってことで、いろいろ試しましたが、一番良かった奴のメモ。

luaPostgreSQLのドライバは以下にまとまっています。

http://lua-users.org/lists/lua-l/2011-01/msg01031.html
http://lua-users.org/wiki/DatabaseAccess

で、気に入ったのが、 lua-poastgres。

https://github.com/norman/lua-postgres

まだまだ、機能不足ですが、今後に期待&自分でいじれそうってのが大きいですが。。。

導入手順

githubの中にrockspecあるんだけど、luarocksで導入できなかったので、普通にソースコンパイル

前提で、/usr/local/pgsql/${VERSIONS}/ にDBをインストールするのが自分のお約束なので、
それに従っています。(今回は9.1.3使ってます)

git clone https://github.com/norman/lua-postgres.git

export PG_CONFIG=/usr/local/pgsql/9.1.3/bin/pg_config
export PATH=$PATH:/usr/local/pgsql/9.1.3/bin

make
paco -D make install

で、あとは、test配下にいろいろあるので、そっち参考にしてもらえばいいんですが、
一応サンプルが動くかをのテストコード。

local postgres = require "postgres"
local conn = postgres.connection('dbname=postgres host=localhost user=postgres')
--local result, error = conn:execute("SELECT * FROM pg_tables")
local result, error = conn:execute("SELECT now()	")

if err then error(err) end
for i = 1, #result do
  local row = result:fetch()
  print(row[1]) -- prints the name
end

C言語頑張らないとなぁー。。。