2012年7月16日月曜日

さくらVPSにTengをインストールしてみました


前回のエントリの続き。
きっかけはPerl Begginers#3に参加して、MySQLとO/Rマッパーに興味を持ったから。
(Perl今のところ関係ないw)

本家サイトはこちらになります。
http://search.cpan.org/~nekokak/Teng-0.12/lib/Teng.pm

1.さくらVPSにrootユーザでログイン。

2.前提としてDBDモジュールが必要なので、DBDモジュールをインストール

# cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.021.tar.gz ... OK
Configuring DBD-mysql-4.021 ... OK
Building and testing DBD-mysql-4.021 ... FAIL
! Installing DBD::mysql failed. See /root/.cpanm/build.log for details.

なんか失敗した・・・?
エラーメッセージでログを見なさい、と言われてるのでログを見てみた。

----ログ抜粋----
gcc -c  -I/usr/lib64/perl5/auto/DBI -I/usr/include/mysql  -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC   -DUNIV_LINUX -DDBD_MYSQL_WITH_SSL -DDBD_MYSQL_INSERT_ID_IS_GOOD -g  -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic   -DVERSION=\"4.021\" -DXS_VERSION=\"4.021\" -fPIC "-I/usr/lib64/perl5/CORE"   dbdimp.c
In file included from dbdimp.c:20:
dbdimp.h:24:49: error: mysql.h: No such file or directory
:(後略)
と何やらコンパイル関係でわらわらエラーが出ている。

MySQLをインストールしただけではDBDのインストールで失敗するということか・・・

調べてみたら、
yum install mysql-devel

で、Perlモジュールなどのその他のMySQLクライアントをコンパイルする場合に必要なライブラリとインクルードファイルがインストールされるらしいので、実行してみる。
(MySQL-devel.rpmについての詳細は http://dev.mysql.com/doc//refman/4.1/ja/linux-rpm.html に記載あり)
確認すると/usr/include/mysql以下にmysql.hが入っていた。これでうまくいくかな?

再度、cpanm DBD::mysqlを実行するとエラーも出ずにインストールできたのでうまくいったようだ。
# cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.021.tar.gz ... OK
Configuring DBD-mysql-4.021 ... OK
Building and testing DBD-mysql-4.021 ... OK
Successfully installed DBD-mysql-4.021 (upgraded from 4.013)
1 distribution installed

3.Tengをインストールしてみる。

# cpanm Teng
:(中略)
Successfully installed Teng-0.14
16 distributions installed

こちらはすんなりうまくいった。

4.テスト用データベース・テーブル・ユーザの作成
テスト用データベースとテーブル、ユーザを作成する。
とりあえず動作確認用なので、テーブルは1カラムだけ設定することに。

mysql> create database testdb;

mysql> use testdb

mysql> create table tengtest(
name text
);

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| tengtest         |
+------------------+
1 row in set (0.00 sec)

mysql> grant all privileges on testdb.* to testuser@localhost identified by 'testpassword';

mysql> quit

mysql -u testuser -p

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| testdb             |
+--------------------+
3 rows in set (0.00 sec)

mysql> use testdb

mysql> select * from tengtest;
Empty set (0.00 sec)

mysql> quit

5.Perlスクリプト実行
以下のtest.plを準備、実行して、データをテーブルにInsertしてみる。
(本家サイトを参考に見よう見まね・・・)

------------------------------------------------------------
#!/usr/bin/env perl
package main;
use Teng;
use Teng::Schema::Declare;

{
    package TestDB;
    use parent 'Teng';
}
{
    package TestDB::Schema;
    use Teng::Schema::Declare;
    table {
        name 'tengtest';
        columns qw(name);
    };
}

my $teng = TestDB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'testuser',
    'testpassword'
]);

$teng->insert('tengtest', {
    name => 'penguinjr1',
});
------------------------------------------------------------
スクリプト実行後、MySQLにログインしてデータが登録されたかどうか確認したところ、正しくデータ登録されていた。

mysql -u testuser -p

mysql> use testdb

mysql> select * from tengtest;
+------------+
| name       |
+------------+
| penguinjr1 |
+------------+
1 row in set (0.00 sec)

<所感>
Tengは慣れれば非常に使いやすいと思います。とてもシンプルだな、という印象を受けました。スクリプト実行時のエラーメッセージもわかりやすい。
MySQLだけでなく、Oracleとも連携させてみたいです。
また、次回の Perl Begginers#4 は8/24(金)開催、「オブジェクトとパッケージ」がテーマということで今からとても楽しみです。
http://atnd.org/events/30711

0 件のコメント:

コメントを投稿