2010年4月7日

EC-CUBEについての所感

当初、日本初のECオープンとして注目されていた、EC-CUBEを遅ればせながら触ってみた。最近ではEC-CUBEがプリインストールされているホスティングサービスなども多数存在している。でもあまり良い評判を耳にしないのは、何故かと思ってインストールしてみたが、始めから不具合の連発。。


その1. インストール画面へのリダイレクト不具合

まず、EC-CUBEの最新版(2010年4月6日現在 ver. 2.4.3)をダウンロードして設置する。
# homeディレクトリにダウンロード
[user@www ~]$ pwd
/home/user

# EC-CUBEをダウンロードして展開
[user@www ~]$ wget http://downloads.ec-cube.net/src/eccube-2.4.3.tar.gz
[user@www ~]$ tar zxvf eccube-2.4.3.tar.gz
[user@www ~]$ cd eccube-2.4.3

# 2.4.3のパッチをダウンロードして適用
[user@www eccube-2.4.3]$ wget http://downloads.ec-cube.net/src/patch/eccube2.4.3_update_file_100401.zip
[user@www eccube-2.4.3]$ unzip eccube2.4.3_update_file_100401.zip
[user@www eccube-2.4.3]$ rm -f eccube2.4.3_update_file_100401.zip

[user@www eccube-2.4.3]$ ls
COPYING data  docs  html

続いて、CentOSにyumでインストールしたApacheのドキュメントルートにシムリンクを作成する。
# Apacheの公開ディレクトリへ移動
[user@www ~]$ cd /var/www

# 一旦、デフォルトのhtmlディレクトリを削除
[user@www ~]$ rm -rf html

# EC-CUBEのhtmlディレクトリへシムリンク作成
[user@www ~]$ ln -s ~/eccube-2.4.3/html

設置が完了したところで、MySQLのデータベース作成と、EC-CUBEのパーミッションを設定しておく。

そして、いざ設置URL(http://www.xxxxx.com/)へアクセスすると、404が返ってくる。しかも、URLはリダイレクトされ、http://install/ となっている… がっくり。
以下のように対応した。

diff -u eccube-2.4.3/data/class/util/SC_Utils.php eccube-2.4.3_dev/data/class/util/SC_Utils.php
--- eccube-2.4.3/data/class/util/SC_Utils.php   2010-04-05 19:33:10.000000000 +0900
+++ eccube-2.4.3_dev/data/class/util/SC_Utils.php       2010-04-06 19:08:03.000000000 +0900
@@ -98,6 +98,9 @@
                     }
                     closedir($dh);
                 }
+                if ($url_dir == '/') {
+                    $url_dir = '';
+                }
 
                 $location = $url_dir . '/install/';
                 header('Location: ' . $location);

この修正で無事インストール完了。



その2. APCが有効な場合のエラー

次に管理画面へログインする際、「タイムアウトしました」のようなメッセージが表示され、ログイン出来ない状態が約1時間…
phpのエラーログを見て、Googleで検索すると、APCが有効な場合はエラーが出るらしい。

えっっ。。今まで散々、APC環境下でPHP開発をしてきたが、不具合が起こった事は一度も無い。
ちなみにPHPのバージョンは5.2.10、APCは3.0.19である。


不具合まとめ
  • インストール画面へのリダイレクト処理 /install/ が //install となってしまい http://install/ を開いてしまう。
  • APCのバグ?により、APCがONの場合は管理画面にログイン出来ないエラーが発生。
    APCをOFFにするとログイン出来るが、もっさり感(動作が重い)。
  • 「郵便番号DB登録」を行うと12万件のデータがDBにインサートされる…
    しかも、待ち時間の画面には何も表示されず、真っ白け。(→かなり遅れて進捗が表示される)
    何も表示されないからポップアップ画面を閉じて、再度「郵便番号DB登録」リンクをクリックしてしまうと最悪。
    裏ではプロセスが生きているため、重複してデータがインサートされてしまう。(12万件 x 2倍)

    僕の環境ではあまりに時間がかかり過ぎてタイムアウトしてしまうため、セッション系の処理をコメントアウトしてコマンドラインから実行しました。

実際にソースコードリーディングをしてみた際の感想

5年前のソースコードかと思うくらいレガシーなソースコードで、未だにPHP4の実装をしている。なんか昔のショッピングカードCGIのような物にも思えてくる。下位互換性などの問題もあると思うが、そろそろPHP5の実装にして高速化を図った方が良いと思う。

現在では、ECのオープンソースは数少ないが、日本で同じようなECのオープンソースが出てきたら、すぐに廃れそうだ。単に開発者のスキルの問題なのか、経営層の問題なのか分からないが、このシステムでビジネスが成り立っているのが不思議なくらいだ。

2010年3月24日

ファイルシステムエラー「UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.」の対処法

CentOSで運用しているサーバを再起動した途端「UNEXPECTED INCONSISTENCY」と表示され、サーバが起動しなくなる事があります。これはファイルシステムチェックでエラーが発生している事を意味しています。

以下は、/dev/md2ファイルシステムにエラーが見つかり起動プロセスが終了しています。
レンタルの専用サーバなどでは、サポートに連絡しても対応してもらえない為、自身で復旧しなければなりません。

Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/md1 
/dev/md1: clean, 310133/4198176 files, 1837577/4194944 blocks
[/sbin/fsck.ext3 (1) -- /boot] fsck.ext3 -a /dev/md0 
/dev/md0: clean, 89/26104 files, 63656/104320 blocks
[/sbin/fsck.ext3 (1) -- /home] fsck.ext3 -a /dev/md2 
/dev/md2: Resize inode not valid.  

/dev/md2: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
[FAILED]

まず、メンテナンスモードでログインします。

Give root password for maintenance
(or type Control-D to continue): ******** ← rootパスワード

プロンプトにてfsckコマンドを実行し修復作業を行い、サーバを再起動します。

(Repair filesystem) 1 # fsck -t ext3 /dev/md2
...
いくつか質問されますが、すべて[Enter]で応答します。

/dev/md2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/md2: ***** REBOOT LINUX *****

(Repair filesystem) 1 # exit

運が良ければ起動出来るはずです。起動しない場合は、ハードウェア故障の可能性が高いため絶望的です。

2010年3月10日

ICカードワールド2010

東京ビッグサイトで開催中の「ICカードワールド」に行ってきました。出展分野はICカード/ICタグ・RFID/磁気カードなどの関連ソリューションです。



今回の目的は、SONYのFeliCaです。FlashやAIRからFelicaを利用するためのSDKがリリースされ、先日から「FeliCa & Adobe® AIR®/Adobe® Flash®アプリケーションコンテスト」が開催されており、その結果発表が行われました。



最優秀賞を獲得したのは、PHP開発で有名なアシアル株式会社さんでした。Felicaを共有して交換日記を行うアプリケーションを開発され、技術だけでなく、人同士のコミュニケーションがある事などのコンセプトが素晴らしいと評価されていました。

コンテスト結果発表! « SDK for AIR/Flashブログ

既にFelicaを使った試験的なサービスが出てきているので、今後は関連サービスも増えてきそうです。ICカードの分野は発展途上なので、どんどん進化して便利になっていく気がします。

あとは、Felicaリーダー(読取側)の普及かぁ。。

2010年2月5日

C言語からMySQLに接続する

覚えたてのC言語でMySQLへの接続を試してみたいと思います。

環境:
  • CentOS 5.4
  • MySQL 5.1.43
  • gcc 4.1.2

ソースコード:mysqltest.c
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

#define MYSQL_SERVER "localhost"
#define MYSQL_USERNAME "USER"
#define MYSQL_PASSWORD "PASSWORD"
#define MYSQL_DATABASE "mysql"
#define MYSQL_PORT 3306
#define MYSQL_SOCKET NULL
#define MYSQL_OPT 0

int main()
{
    MYSQL *connect;
    MYSQL_RES *result;
    MYSQL_ROW row;

    connect = mysql_init(NULL);
    if (!mysql_real_connect(connect, MYSQL_SERVER, MYSQL_USERNAME,
            MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT,
            MYSQL_SOCKET, MYSQL_OPT)) {
        fprintf(stderr, "%s\n", mysql_error(connect));
        exit(1);
    }

    if (mysql_query(connect, "show tables")) {
        fprintf(stderr, "%s\n", mysql_error(connect));
        exit(1);
    }

    result = mysql_use_result(connect);

    printf("----MySQL Tables in '%s' database -----\n",
        MYSQL_DATABASE);
    while ((row = mysql_fetch_row(result)) != NULL) {
        printf("%s\n", row[0]);
    }

    mysql_free_result(result);
    mysql_close(connect);
}

コンパイル:mysqltestの作成
[user@centos ~]$ gcc -o mysqltest \
 -I /usr/include/mysql/ \
 -L /usr/lib/mysql/ \
 -l mysqlclient \
 mysqltest.c

プログラムの実行
[user@centos ~]$ ./mysqltest
----MySQL Tables in 'mysql' database -----
columns_priv
db
event
func
general_log
help_category
help_keyword
help_relation
help_topic
host
ndb_binlog_index
plugin
proc
procs_priv
servers
slow_log
tables_priv
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
user

よし、できた。
次は、httpアクセスをやるぞ~

2010年2月2日

Firefox3.6でプロファイルマネージャーを起動

Firefoxで複数プロファイルを同時利用するで紹介したアドオン「Profile Manager and Synchronizer」がFirefox3.6に未対応のため、別の方法でプロファイルマネージャーを起動したいと思います。

Windowsの「スタートメニュー」-「ファイル名を指定して実行」から以下のコマンドを入力すれば起動出来ます。
firefox -no-remote -P

2010年1月26日

Firefox3.6でYShowを2.0.5にアップデート時にクラッシュした際の対処法

最近リリースされたFirefox3.6をインストールしましたが、開発用のアドオンが未対応で苦戦中です。3.5系に戻したい。。

そんな中、読み込み速度などを測定するベンチマークツールであるYahoo!製のYShowが2.0.5へアップデートされました。Firebugとの関連もあると思いますが、僕の環境では起動時にクラッシュレポートがいきなり立ち上がりFirefoxが起動しません。何度やっても解消せず。。



とりあえず、「スタートメニュー」-「すべてのプログラム」-「Mozilla Firefox」-「Firefox(セーフモード)」で「すべてのアドオンを無効」にして起動後、アドオン管理からYShowを無効化して解決しました。



また早急にYShowのアップデートがありそうですね。

2010年1月20日

Google Chrome OSをVirtualBoxで試す

昨年末にChrome OSのオープンソースプロジェクトChromium OSが発表されました。しかし、自前でビルドしてOSイメージを作成しなければならないため面倒です。今回はChrome OSのVMイメージを使用させてもらいました。



1. Chrome OSのVMイメージをダウンロード(Torrentファイル)
VirtualBox版


2. VirtualBoxで仮想アプライアンスのインポート
ダウンロードした仮想アプライアンス情報(.ovf)ファイルを選択し、VirtualBoxに設定をインポートします。


3. 起動
電源をONにすると5秒くらいで起動します。
ユーザー名:chronos
パスワード:password





基本的にGoogle Chromeがフルスクリーン表示されます。
ブラウザしか動かないOSって使うかなぁ。まだ未知ですね。。