2012年4月30日月曜日

php-fpmで”Starting php-fpm .... failed"になる

どうも、俺@連休満喫中です。
今日はphp-fpmを起動させたときに起こったトラブルシューティングです。

phpv5.4.1をソースからインストールし、php-fpmの起動スクリプトを/etc/init.d以下へ設置します。

# cp php-5.4.1/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm

これで起動させます。

# service php-fpm start
Starting php-fpm .................................... failed
Oh!No! 起動失敗かよ!
と思いきや、psコマンドで見るとphp-fpm動いてる。

# ps axuw -H

root     26983  0.0  0.3  98380  4056 ?        Ss   00:53   0:00   php-fpm: master process (/usr/local/php-5.4.1/etc/php-fpm.conf)                    
nginx    26984  0.0  0.4  98380  4412 ?        S    00:53   0:00     php-fpm: pool www                                                                  
nginx    26985  0.0  0.4  98380  4420 ?        S    00:53   0:00     php-fpm: pool www   

コンソール上では起動失敗しているように見えますが、php-fpmプロセスは起動しています。なのでこのままでも動作はしますが毎回起動する度にエラーが出るので気持ち悪いです。
多分ですが、起動後にpidファイルの生成がうまくいかずエラー表記になってるみたいです。今度調べとかないと。。

なんて状況で困っているあなた。

調べてると、
http://serverfault.com/questions/195966/php-fpm-getting-a-failed-message-but-the-processes-start-ok
に答えがありました。
php-fpm.confファイルにあるpid fileに関するディレクトリがコメントアウトされているので「;(セミコロン)」を外せば良いようです。


# vim /path/to/php-fpm.comf
-----------------------------------------

 25 ;pid = run/php-fpm.pid
 26 pid = run/php-fpm.pid
これでよし。

これで起動させれば、問題なく起動できます。


以上でぇぇぇえす。



2012年4月6日金曜日

[Node]expressで”Cannot find module ‘express’が出る

どうも、俺@寝る前です。
前回の内容とかぶるのですが。


開発スピードの超早いNodeですが、あまりにも早過ぎるため開発中にどんどん新しいバージョンがリリースされてしまいます。
流行りもの好きな人にとっては居ても立ってもいられない状況であり、それを解決するためのツールの一つにnaveがあります。
もはや説明するまでもなく、Nodeのバージョン管理ツールです。

今日はnaveを使ってタイトルのようなエラー、または他にもNodeで使うはずのモジュールが「Cannot findだぜ!」となる人へ。

$ node app.jp
node.js:12
throw e; / process.nextTick error, or ‘error’ event on first tick
^
Error: Cannot find module ‘express'

要は環境変数NODE_PATHに対し、正しくNodeモジュール群のパスを示せれば良いので、

export NODE_PATH=/path/to/node_modules
とすれば良いのですが、
「/path/to/node_modulesってどこだよっ!?」って人は、
naveをインストールしたディレクトリを起点に

[naveインストールディレクトリ]/installed/[バージョン番号]/lib/node_modules
にあります。

これで解決なのですが、毎回 export 打つのは面倒です。なので、

$ vim ~/.zshrc
---------------------------------
export NODE_PATH=/path/to/node_modules
としても良いのですが、.zshrcにハードコーディングするとバージョンが変わるたびに.zshrcを書き換えなければいけません。
そこで、もう一つの代案として、

$ vim /path/to/nave.sh
-----------------------------------
# nave_use()を探して、その関数内にある
local lib=“$prefix/lib/node:$prefix/lib/node_modules
と変更する方法でも良いです。
ちなみにnave.shは僕の環境だと

$ ls -la ~/.nave

合計 116
drwxr-xr-x 5  koexuka groupname  4096  3月  6 00:21 .
drwxr-xr-x 6 koexuka groupname  4096  3月  6 00:16 ..
drwxr-xr-x 8 koexuka groupname  4096  3月  3 14:33 .git
-rw-r--r-- 1 koexuka groupname    14  3月  3 14:33 .gitignore
-rw-r--r-- 1 koexuka groupname    14  3月  3 14:33 .npmignore
-rw-r--r-- 1 koexuka groupname     9  3月  3 17:24 .zshenv
-rw-r--r-- 1 koexuka groupname   248  3月  3 14:33 AUTHORS
-rw-r--r-- 1 koexuka groupname  4002  3月  3 14:33 README.md
drwxr-xr-x 4 koexuka groupname  4096  3月  4 15:04 installed
-rwxr-xr-x 1 koexuka groupname 12918  3月  4 15:06 nave.sh
-rw-r--r-- 1 koexuka groupname   345  3月  4 15:02 naverc
-rw-r--r-- 1 koexuka groupname   197  3月  3 14:33 package.json
drwxr-xr-x 3 koexuka groupname  4096  3月  4 15:04 src
にあります。

以上でぇぇぇぇぇぇす。

2012年4月3日火曜日

zshでnaveを使うと"no such option: rcfile"が出る

どうも、俺@仕事中です。
nodeのバージョン管理をnaveを使って優雅に使いこなそうとして

$ ./nave.sh use stable
とかカッコ付けてやると

$ Already installed: 0.6.14
using 0.6.14
/bin/zsh: no such option: rcfile
とか出て「マジでか!?」ってなる人へ。

nave use latest: zsh no such option rcfile - Linux LABS
にあるように実行ユーザのシェルをbashに変えちゃうという方法もありますが。

nave.shを見てみると
$ vim nave.sh

-------------------------------
408: "$SHELL" --rcfile "$NAVE_DIR/naverc"
〜(中略)〜
464: "$SHELL" --rcfile "$NAVE_DIR/naverc"
と2ヶ所rcfileオプションを使ってる場所があります。
そもそもrcfileオプションはbashで使えるオプションで、コマンドラインでシェルを使う場合に設定ファイルとして読み込むファイルを指定できるオプションです。
つまり上記のnave.shでは

 bash --rcfile ~/.nave/naverc
のように"~/.nave/naverc"を読み込んで対話型bashを使う、というようにプログラムされているのですが、
実行ユーザのシェルがbash以外だと$SHELLがzshなりtcshなりに展開されて、意図しない動きになっちゃう訳です。

僕が普段使うzshは--rcfileというオプションが使えません。
基本的にログイン時は

$ZDOTDIR/.zshenv $ZDOTDIR/.zprofile $ZDOTDIR/.zshrc $ZDOTDIR/.zlogin
これらのファイルが読み込まれるのですが、全部が全部ログイン時に読み込まれるわけではなく、詳しくは
zsh - watallica metallicus
を参照のこと。

今回は .zshrc に設定することにします。
# 以下の方法は正しい動作を保証するものではありません。
# とりあえず動くように設定していますので、安定性を重視する場合は実行ユーザのログインシェルをbashにしておき、配布されたソースプログラムは変更しない事をお勧めします。

という訳で、書き換えちゃいましょう。
$ vim nave.sh

-------------------------
# nave_use () 内
397: else
398:   hash -r
399:   NAVELVL=$lvl NAME="$version" ¥
400:     NAVEPATH="$bin" ¥
401:     NAVEVERSION="$version" ¥
402:     NAVENAME="$version" ¥
403:     npm_config_binroot="$bin" npm_config_root="$lib" ¥
404:     npm_config_manroot="$man" ¥
405:     npm_config_prefix="$prefix" ¥
406:     NODE_PATH="$lib" ¥
407:     NAVE_LOGIN="1" ¥
408:    "$SHELL"
409: #"$SHELL" --rcfile "$NAVE_DIR/naverc"

コレでよしと。

次にnave用のzshが起動されたときの処理を.zshrcに書きます。
$ vim ~/.zshrc
------------------------------------
# 追加
if [ "$NAVE_LOGIN" = "1" ]; then
    export PATH=$NAVEPATH:$PATH
fi


これで準備完了です。
あとは優雅に

$ nave.sh use stable
と打つべし。


以上でぇぇぇえぇぇす。





gccのバージョンを確認する方法

どうも、俺@昼休みです。

インストールされているgccのバージョンを確認したい場合は

$ gcc -dumpversion
3.4.5
で確認できます。
ちなみにv3.4.5は非常に古いバージョンですが、僕の開発サーバではこのバージョンでgcc使ってます。


以上でぇぇぇぇぇえす。