メールフォームで受けたアンケートを DB に保存する

MODx の eForm から eform2db のような手法で直接 DB に入れようと思っていたが、ビジネス上の都合で叶わず、メールで受け取ることになった。まあ、そんなにアンケートに答えてくれる人がいるわけじゃないから、いいでしょ。と思っていたら大量のメールが送られていた。あら~。

仕方がないので、メールを読み取って DB に格納することにした。

#!/usr/bin/ruby
 
# ■ 使い方
#
#  引数にメールファイル名を渡す。1メール1ファイル。
#  ruby ./mail2db.rb mail/*
#
#  すると、DB に格納される。
#
# ■ メール本文の形式
#
# ----- ここから -----
# アンケートへの回答がありました♪
#
# 日時: 15-05-2009 14:07:27
# おなまえ:xxxx
# メールアドレス:xxxxx@xxx.com
# 参加可能日時:0523_1000, 0530_1000
# 利用頻度:8-19
# きっかけ:きっかけきっかけきっかけきっかけきっかけきっかけきっかけ
# きっかけきっかけきっかけきっかけきっかけきっかけきっかけきっかけ。
# 要望:ようぼうようぼうようぼうようぼうようぼうようぼうようぼうようぼう。

yum update で yum が落ちる - TypeError: unsubscriptable object

yum update で yum が落ちるときは yum clean metadata で。

0003481: yum install openmotif22 dies with 'TypeError: unsubscriptable object'

$ sudo yum update
Password:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.nus.edu.sg
 * updates: centos.mirror.cdnetworks.com
 * addons: mirror.nus.edu.sg
 * extras: mirror.averse.net
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package file.i386 0:4.17-15.el5_3.1 set to be updated

in

MODx の eForm から DB に保存する

MODx の eForm を使うと、メールフォームが簡単につくれる。しかし、メールではなくてDB保存して、あとでまとめてデータを取得したいということもある。

そういう用途にぴったりな eForm2db というのを見かけた。MODx が備える DBAPI と、eForm のイベントハンドリングを使った、シンプルな snippet だ。こんなに簡単にできるのか、と喜んだのもつかの間、この snippet を呼ぶと画面は真っ白、Apache のログにはエラー、DB には何も記録されない、という状態になった。

Apache のエラーログはこのような感じ。

[Fri May 08 04:26:59 2009] [error] [client 10.1.1.231] PHP Fatal error:  Call to  undefined function eForm2db() in /home/xxx/public_html/modx-0.9.6.3/assets
/snippets/eform/eform.inc.php on line 377, referer: http://test1.xxx.xxx/~xxx/modx/

in

MODx でメールフォームを作る

MODx(v0.9.6) 標準添付の eForm を使う。

作る Chunk(HTMLの断片) は 3つ。

  • フォームテンプレート
  • フォームサブミット後のありがとうメッセージ
  • メールテンプレート
in

MTOS で Google 認証を使えるようにするために Crypt::SSLeay をインストール

△openssl-devel が必要
# yum install openssl-devel
 
△古いといわれたのでCPANもアップデート
# cpan Bundle::CPAN
 
△お目当ての SSLeay
# cpan Crypt::SSLeay

CentOS5 に TeX をインストール

$ wget http://tutimura.ath.cx/~nob/tex/ptetex/ptetex3/ptetex3-20090506.tar.gz
(↑超最新版であることにびっくり)
$ wget wget http://www.ring.gr.jp/pub/text/CTAN/systems/unix/teTeX/3.0/distrib/tetex-src-3.0.tar.gz
$ wget http://www.ring.gr.jp/pub/text/CTAN/systems/unix/teTeX/3.0/distrib/tetex-texmf-3.0po.tar.gz
 
$ tar zxvf ptetex3-20090506.tar.gz
$ cd ptetex3-20090506
 
$ cp my_option.sample my_option
$ vi my_option
$ make
$ sudo make install

あとは、/usr/local/teTeX/bin にパスを通せばいい。

my_option の変更箇所

△変更箇所
KANJI_CODE=UTF8
 
### X 環境がない場合

in

Amazon EC2 Reserved Instances を買ってみた

  1. まず、Reserved Instance をサポートしている API version 2009-03-01 以降の EC2 API Tools をインストールする。
  2. 購入済み Reserved Instance を確認する。
    $ ec2-describe-reserved-instances

    まだ何もない。買っていないのだから当然だ。

  3. 購入可能な Reserved Instance 一覧 (offerings) を見る。
    $ ec2-describe-reserved-instances-offerings
    OFFERING e5a2ff3b-f6eb-4b4e-83f8-b879d7060257 us-east-1a c1.medium 3y 1000.0 0.06 Linux/UNIX

APC (Alternative PHP Cache) の管理画面

APC にはこんな管理画面がついてくる。
キャッシュの利用状況の確認、キャッシュのクリアなどできる。

apc.png

CentOS5 で pecl からインストールした場合は、/usr/share/pear/apc.php にインストールされていた。/var/www/html の下の適当な場所からシンボリックリンクを張ってアクセスできるようにした。

デフォルトではパスワードを指定する必要があるので、apc.php 冒頭の以下の部分を変更する。パスワードが "password" のままではログインできないので注意。

defaults('ADMIN_USERNAME','apc');                       // Admin Username
defaults('ADMIN_PASSWORD','password');

apc.png
in

APCをインストールした

PHP をバイナリでキャッシュする APC (Alternative PHP Cache) をインストールした。

  1. APC をインストールする。
    # pecl install apc
  2. /etc/php.ini に apc の設定を追加する。
    [apc]
    extension=apc.so
  3. Apache を再起動する。
    # service httpd graceful
  4. phpinfo() を実行して APC Support が enabled になっていれば成功。
    # cat test.php
    <?php
    phpinfo();
    ?>

    phpinfo_apc.png

失敗するときは

  • php-devel が無い場合のエラー。php-devel をインストールする。
    # pecl install apc
    downloading APC-3.0.19.tgz ...
phpinfo_apc.png
in

EC-CUBE は PostgreSQL で使うべき? - MySQL での稼働失敗

日本製のオープンソースECソフト、EC-CUBE 2.3.3 を MySQL で使おうとしたけれど、配送設定で複数の配送時間を登録しようとするとエラーが起きてログイン画面に遷移してしまう。PostgreSQL に変えてみてからは、問題は起きていない。

EC-CUBE はもともと Postgres用らしく、開発者も Postgres を使っているとのこと。なので、PostgreSQL を使える環境なら、迷わず Postgres にした方がよさそう。MySQL でも何となく動いてはいたけど、配送時間の登録ごときでシステムエラーになってしまうようでは、先が思いやられる。フォーラムの書き込みなどを見ると、速度も Postgres を使う方が速いらしい。

ちなみに、配送時間の登録で出たエラーはこれ。(data/logs/site.log)

INSERT INTO dtb_delivtime(deliv_time,deliv_id,time_id) VALUES ('18:00 ~ 0:00','3',15) [nativecode=1062 ** Duplicate entry '15' for key 1]

dtb_delivtime とはどんなテーブルだろう?

 

Syndicate content