お久しぶりです。
約半年ぶりのfujitaです。こんばんわ。
本番環境と開発環境で、cronのバッチの振る舞いを変える事ってよくありますよね?
今回はPHPでの例ですが、その一案について書きます。
例えば、下記のようなコードがあったとします。
<?php class BlogShell extends AppShell { public function main() { $this->out('Hello world.'); } public function where_is_here() { if(preg_match("/^(dev)\./", $_SERVER['SERVER_NAME'])){ // 開発環境 $this->log('Hi! @staging'); }else{ // 本番環境 $this->log('Hi! @production'); } } }
これを、
- 本番環境サーバー ・・・ labs.septeni.co.jp
- 開発環境サーバー ・・・ dev.labs.septeni.co.jp
crontabで下記のようにスケジュールを設定し、
*/1 * * * * /home/hoge/app/Console/cake Blog where_is_here
実行させた場合、下記のような結果になります。
$ tail -f app/tmp/logs/error.log
2013-07-30 21:27:01 Error: Hi! @production
当然ですね。
これは、環境変数「$_SERVER['SERVER_NAME']」が取得できてないからですね。
そこで、開発環境のcronの設定を、
HOSTNAME="dev.labs.septeni.co.jp" */1 * * * * /home/hoge/app/Console/cake Blog where_is_here
と変数「HOSTNAME」を定義しまして、where_is_here()メソッドを下記のように修正することで、期待した通りの結果となります。
public function where_is_here() { if(preg_match("/^(dev)\./", $_SERVER['HOSTNAME'])){ // 開発環境 $this->log('Hi! @staging'); }else{ // 本番環境 $this->log('Hi! @production'); } }
$ tail -f app/tmp/logs/error.log
2013-07-30 21:32:01 Error: Hi! @staging
これで、本番環境と開発環境で振る舞いを変える事ができました。
めでたしめでたし。 :-)