それ図解で。・・・tohokuaikiのチラシの裏

2012-02-06

CentOS5(64bit)にPHP5.3を入れてMemcachedを使うようにしたかったのでメモ

PHPに存在する2つのmemcacheモジュール

PHPには、memcahcedと対話する2つのExtensionモジュールがある。MemcacheMemcachedである。

memcachedの方が後発で機能も豊富らしい。Igbinaryという文字列ではなくてバイナリ形式でのシリアライズ方式もサポートしている。

http://www.jqueryin.com/2011/04/19/php-memcache-vs-memcached/

http://stackoverflow.com/questions/1442411/using-memcache-vs-memcached-with-php

ただし、memcachedはPHP5.2以上でないと使えないのとlibmemcachedライブラリが必要みたい。まぁ、パッケージマネージャ使ってれば面倒な話ではないんでしょうけど。

Peclパッケージを見ると、どちらも同じくらいの開発の勢い。

http://pecl.php.net/package/memcache

http://pecl.php.net/package/memcached

どっちを使ってもいいけど、ややこしいので間違わないように。*1

自分はmemcacheを使いました。*2

php-memcache

どうもPHP53の64bit版が無いようなので、ソースから入れる

wget -O php-pecl-memcache.tgz http://pecl.php.net/get/memcache
tar xvzfmp php-pecl-memcache.tgz
cd memcache-3.0.6/
phpize
make
./configure
make
make install

途中でzlib-develが無いと言われたので追加でインストールした。

そのあとphp.iniに

extension_dir = "/usr/lib64/php/modules"

extension=memcache.so

を入れる。

# php -m |grep memcache
memcache

memcachedをいれる

これも普通にダウンロードできないので、rpmforge-extrasのリポジトリを追加してrpmforgeを有効にする。

more /etc/yum.repos.d/rpmforge.repo
# Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag
# URL: http://rpmforge.net/
[rpmforge]
name = Red Hat Enterprise $releasever - RPMforge.net - dag
#baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1


[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/extras
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge-extras
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

とりあえず、rpmだけダウンロードする

なんでダウンロードだけかというと、あとで別のrpmforgeが使えないサーバに持って行ってサーバ業者にお願いするからです。

yum --downloadonlyを使いたかったのだけど、これはyum-downloadonlyというパッケージが必要なので、

yum install -y yum-downloadonly
yum --enablerepo=rpmforge-extras install --downloadonly memcached
||

・・・ところが、perl-AnyEventが無いよって言われる。なければ自動的に引っ張ってきてほしいんだけど、

>|sh|
 yum install -y --downloadonly --enablerepo=rpmforge-extras perl-AnyEvent

ってしてもエラーが出る。

--> Running transaction check

---> Package perl-AnyEvent.noarch 0:5.240-1.el5.rf set to be updated

--> Processing Dependency: perl(JSON) >= 2.09 for package: perl-AnyEvent

--> Processing Dependency: perl(JSON::XS) >= 2.2 for package: perl-AnyEvent

--> Processing Dependency: perl(EV) >= 3.05 for package: perl-AnyEvent

--> Processing Dependency: perl(Net::SSLeay) >= 1.33 for package: perl-AnyEvent

--> Processing Dependency: perl(Guard) >= 1.02 for package: perl-AnyEvent

--> Processing Dependency: perl(Net::SSLeay) for package: perl-AnyEvent

--> Running transaction check

---> Package perl-AnyEvent.noarch 0:5.240-1.el5.rf set to be updated

--> Processing Dependency: perl(Net::SSLeay) >= 1.33 for package: perl-AnyEvent

---> Package perl-EV.x86_64 0:4.03-1.el5.rf set to be updated

--> Processing Dependency: perl(common::sense) for package: perl-EV

---> Package perl-Guard.x86_64 0:1.021-1.el5.rf set to be updated

---> Package perl-JSON.noarch 0:2.50-1.el5.rf set to be updated

---> Package perl-JSON-XS.x86_64 0:2.30-1.el5.rf set to be updated

---> Package perl-Net-SSLeay.x86_64 0:1.30-4.fc6 set to be updated

--> Running transaction check

---> Package perl-AnyEvent.noarch 0:5.240-1.el5.rf set to be updated

--> Processing Dependency: perl(Net::SSLeay) >= 1.33 for package: perl-AnyEvent

---> Package perl-common-sense.x86_64 0:3.0-1.el5.rf set to be updated

って依存性いっぱい。

perl-AnyEventが必要なんだけど、これに必要なのが

perl(JSON)

perl(JSON::XS)

perl(Net::SSLeay)

perl(Guard)

perl(EV)

ただ、perl(EV)に必要なのが

perl(common::sense)

なので、順番としては

yum install -y --downloadonly --enablerepo=rpmforge perl-common-sense
yum install -y --downloadonly --enablerepo=rpmforge perl-EV
yum install -y --downloadonly --enablerepo=rpmforge perl-Guard
yum install -y --downloadonly --enablerepo=rpmforge perl-Net-SSLeay
yum install -y --downloadonly --enablerepo=rpmforge perl-JSON
yum install -y --downloadonly --enablerepo=rpmforge perl-JSON-XS
yum install -y --downloadonly --enablerepo=rpmforge perl-AnyEvent

という感じか。でこれらを全部rpm -ivhインストール

perl-Net-SSLeayはbaseリポジトリにあった。

・・・・が、これ1.30で、1.33以上が必要なのでrpmforge-extrasからダウンロードする

yum install -y --downloadonly --enablerepo=rpmforge-extras --disablerepo=base perl-Net-SSLeay
rpm -e perl-Net-SSLeay
rpm -ivh perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm

ここまでやってようやく

yum install -y --downloadonly --enablerepo=rpmforge perl-AnyEvent

ダウンロードできるようになった。でインストール


さてようやくmemcachedが行けるかと思いきや

yum install -y --downloadonly --enablerepo=rpmforge-extras memcached

Resolving Dependencies

--> Running transaction check

---> Package memcached.x86_64 0:1.4.7-1.el5.rfx set to be updated

--> Processing Dependency: perl(YAML) for package: memcached

--> Processing Dependency: perl(Term::ReadKey) for package: memcached

--> Finished Dependency Resolution

memcached-1.4.7-1.el5.rfx.x86_64 from rpmforge-extras has depsolving problems

--> Missing Dependency: perl(Term::ReadKey) is needed by package memcached-1.4.7-1.el5.rfx.x86_64 (rpmforge-extras)

memcached-1.4.7-1.el5.rfx.x86_64 from rpmforge-extras has depsolving problems

--> Missing Dependency: perl(YAML) is needed by package memcached-1.4.7-1.el5.rfx.x86_64 (rpmforge-extras)

と依存性エラー

yum install -y --downloadonly --enablerepo=rpmforge perl-YAML
yum install -y --downloadonly --enablerepo=rpmforge perl-Term-ReadKey

ここまで来て、ようやくダウンロードできた。

あー、長かった・・。ここまでやってなんだけど、なんか、rpmforgeじゃなくてremi使うとイイっぽい。

こことかこことかこことか参考にしました。

で、起動させておく

/etc/init.d/memcached start
# Distributed memory caching (memcached) を起動中:           [  OK  ]
chkconfig memcached on
chkconfig --list|grep mem
# memcached       0:off   1:off   2:on    3:on    4:on    5:on    6:off

こんな感じ。


とりあえず使ってみる

PHPセッションmemcachedに持たしてみる。

<?php
$session_save_path = 'tcp://localhost:11211';
if (ini_set('session.save_handler', 'memcache') && ini_set('session.save_path', $session_save_path)){
    session_start();
    var_dump(++$_SESSION['counter']); 
}

$session_save_path = "tcp://$host:$port1?persistent=1&weight=2&timeout=2&retry_interval=10,tcp://$host:$port2";

というように複数のmemcachedサーバに繋ぐこともできる。persistent=1は多分pconnectで接続するってこと。

*1:当然のように勘違いしてハマりました

*2:本当はmemcachedを入れたかったのだけど間違えた。

2012-01-30

fontタグのsizeによる大きさをチェックするスクリプト

どの大きさが何ポイントはブラウザによるので、目で確かめる。

<html>
<head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  <script>
  $(function(){
      for (var i=1; i<=8; i++){
          $('body').append('<h2>fontsize:'+i+'</h2>');
          for (var j=4; j<=50; j++){
              $('body').append('fontsize: <font size="'+i+'">fontsize:'+i+'</font><font style="font-size:'+j+'px">style:font-size:'+j+'</font><br />');
          }
      }
  });
  </script>
</head>
<body>
</body>
</html>

2012-01-17

Confluenceのインストールしたり、移動したり

ライブラリ

JDKインストールする。

ORACLEのこのあたりからダウンロードする。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

RedHat系ならRPMがあるので便利。

rpm -ivh jdk-7u2-linux-x64.rpm

あと、この記事によるとlibXpが必要なので、インストール

# yum install libXp.x86_64

基本的にこれだけ。


サーバを移動する

Confluenceデータディレクトリ/confluence.cfg.xml

にデータソースdsn://っぽいのがあるのでそこを適当に変える。


Confluence4の場合

Confluenceのbinディレクトリstartup.shとかshutdown.shとかあるところ?にsetenv.shっていうのがあって、この中に環境依存の記述ができてるので、それを変更する。具体的には、Shell変数の$JRE_HOME

なんでこんなところに・・・。

2012-01-12

LESS.jsでwatchモードが効かなかった話

何のことはない、less.jsはwatchモードが有効になるには、hostnameがlocalhost/127.0.0.1/0.0.0.0出なければならないみたい。

http://www.paulsprangers.com/2011/04/quick-tip-less-js-in-development-and-watch-mode/

less.jsの中に

location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"

って書いてある。

なので、これを弄ってやるとWatchモードが使える。


・・・だけど、これやったら今度はwatchがデフォルトで走って止まらないようになってしまったのだけど・・・

と思ってたら、

どうも、1.1.4では何の問題もなく上記の対応でwatchモードになる。

なんか、このブログ書いた時点での1.2.0がおかしいみたい。@importでlessを読み込もうとするとエラーになるし。

2012-01-07

テーマ下画像表示用ショートコード

[themeimage src="images/dummy/main.jpg" style="width:900px;"]

とかで、

<img style="width:900px;" src="http://xxxxxxxx/wp-content/themes/xxx/images/dummy/main.jpg">

を表示する。attributeはいくつでも可能。

多分幾多の人が作ってるかと思ったが、探すより調べた方が速いので書いた。

テーマのfunctions.phpに下記を追加

<?php
/**
 * @brief テーマ下画像表示用ショートコード
 * @param 
 * @retval
 */
function themeimage_show_func($attrs)
{
    $attr = '';
    $src  = '';
    foreach ($attrs as $key=>$value){
        if ($key == 'src') {
            $src = $value;
        }
        else {
            $attr .= sprintf(' %s="%s"', $key, $value);
        }
    }
    $s = sprintf('<img src="%s/%s" %s/>',
                 get_bloginfo('stylesheet_directory'), $src, $attr);
    return $s;
}
add_shortcode('themeimage', 'themeimage_show_func');
track feed