手が震えたらBARに行こう

駄文を吐き出して、今日もなんとか、元気に生きていこうと思います。twitterアカウントは、@tabunmuri255です。よろしくです。

サービスが突然落ちて、「The page you are looking for is temporarily unavailable. Please try again later.」と表示されていた話

ある日、サービスにアクセスしてみたら、文字通り、
「The page you are looking for is temporarily unavailable. Please try again later.」
という無慈悲なメッセージが出ていた。

そんなわけで、トラブルシューティングの流れを書いてみる。
今回は、これでうまくいったけれども、次回、これでうまくいくとは限らない。

作戦1 ログを見てみる

Apatchにしろ、nginxにしろ、ログを出力するようになっている。
知っている限りだが、だいたい下記のような感じ

サービス名 ログの場所
Apatch /var/log/httpd/access.log
nginx /var/log/nginx/access.log

これらを見る。
この時、vimやlessで見ても構わないが、個人的には、tailfをおすすめする。
tailfは、テキストの内容が更新されたりすると、その更新がリアルタイムに反映されるコマンドだからである。
tailf - コマンド (プログラム) の説明 - Linux コマンド集 一覧表

これを使って、コンソール画面を眺めながら、何度か、例のエラーを吐いているwebページにアクセスしてみる。
すると、下記のようなエラーが出るばかり。

192.68.10.114 - - [1/Aug/2014:13:00:00 +0900] "GET /temp_test.php HTTP/1.1" 502 3695 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36" "-"
192.68.10.114 - - [1/Aug/2014:13:00:00 +0900] "GET /nginx-logo.png HTTP/1.1" 404 571 "http://192.168.100.131/temp_test.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36" "-"
192.68.10.114 - - [1/Aug/2014:13:00:00 +0900] "GET /poweredby.png HTTP/1.1" 404 571 "http://192.168.100.131/temp_test.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36" "-"

わかったのは、temp_test.phpにアクセスしようとすると、502だぜ。
って事と、他が404だったという事

ちなみに、エラーコードの内容は下記のような感じ。

エラーコード 内容
502 なんかサーバの中で問題が起きてて、バグってね?
404 指定されたファイルないYO

ここで、アクセスログには上記のヒントしかなかったという事になる。
→失敗

作戦2 google先生に聞こう

google先生に聞いてみた。
俺「google先生、【The page you are looking for is temporarily unavailable. Please try again later.】っていうエラーがでてるんだけど、なんか教えろ!」
google先生「下記のページを見るとよいぞなもし」

Nginx (日本語) - ArchWiki
nginxでerrorが出た場合 | OpenMediaLaboratory Blog

俺「ほう・・・。なるほどなるほど。」

ここで、話を整理すると、どうやら、こういう現象が出る原因としては、3つくらいあるらしい。
- fastcgiが落ちてる
- php-fpmが落ちてる
- ソケットが間違ったパーミッションに設定されている。

確かに、502のエラーコードを吐き出すに、あたっては、十分可能性として考えられる。
ということで、見に覚えがありそうな順番として、下記を上から順番に試しました。
-> nginxを再起動 ---> ダメ(で・・・ですよねー)
-> php-fpmを再起動 ---> 復活

ということで、これで、一応復活。
あと、ついでにDBも落ちているらしいということがわかったので、これも再起動。

これによって、復活・・・

_人人人人人人人人人人人_
>  完 全 復 活  <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

ということで、直りました。
よかったですー。

nitrous.ioでcakePHPを動作させるまでをまとめました

書き散らかしたのでまとめました!
今日はそれだけです!

【導入編】nitrous.ioで、CakePHPを使えるようにするまで - 手が震えたらBARに行こう

【前編】nitrous.ioで、CakePHPを使えるようにするまで - 手が震えたらBARに行こう

【後半】nitrous.ioで、CakePHPを使えるようにするまで - 手が震えたらBARに行こう

【おまけ】nitrous.ioで、CakePHPを使えるようにする【エラー潰し】 - 手が震えたらBARに行こう

あと、ペアプロ合コンは男子の枠が無事に埋まりました!(2014/06/27)
残るは女子枠だけだけれとも、みなさま、いかがでしょう?
ペアプロ合コンに行くと、肌年齢が10歳若返るって言われてるらしいですよ。(すっとぼけ)

ペアプロ合コン【プログラム中級者以上の女子枠】(後3人)
ペアプロ合コン【プログラム中級者以上の女子枠】 - connpass
ペアプロ合コン【プログラム初級者の女子枠】(後4人)
ペアプロ合コン【プログラム初級者の女子枠】 - connpass

ということで、よろしくお願いします。

【おまけ】nitrous.ioで、CakePHPを使えるようにする【エラー潰し】

前回、エラー出てるのにも関わらず、ほっぽってすみません。
こういう時、2000年台のブログだと、
「あ、こら、そこ!石投げないで!」
とか、一人ギャグやってたのがあったような気がします。
でも、好きなので、やっときます。

「あ、こら、そこ!石投げないで!はてなブックマーク消さないで!」
フー今日もいい仕事した。(やりきった感)


さて、エラーつぶししましょうかね。
ぱっと見る限り怒られている原因は下記の3点かと思います。
- 時間の設定
- debugKitの設定がされていない
- データベースとの接続設定がされていない

じゃあ、一個ずつ解決していきましょう

時間の設定

これは、どのタイムゾーンcakePHPを動作せるか、設定されていない事が原因です。
なので、Config/core.php内の259行目近辺で、時間に関することを設定しているので、そこで下記のコードを書けばOKです。

date_default_timezone_set('Asia/Tokyo');

これで、OK

debugKitの設定がされていない

これは、Config/bootstrap.php内の最下部あたりに下記のコードを書き加えればOKです。

CakePlugin::load('DebugKit');

データベースとの接続設定がされていない

これは、接続できるようにすればいいだけです。
Nitrous.IOmysqlに鍵設定などはついていません。
また、ログインした後も、mysqlユーザの作成なども一切行えないので、そういう前提で、作業を進めたほうが良さそうです。
というわけで、データベースを作っちゃいましょう。
データベース作成のコマンドは、

create database <DB名>

となっています。
なので、例えば、以下のようにやると良いかもしれませんね。

create database test_db;

後は、test_app/Config/database.php.defaultをコピーしてdatabase.phpを作ります。
プロジェクトディレクトリ内で以下を試せばOKです。

test_app/Config/database.php

そしたら、後は、Config/database.phpの52行目付近に下記のように書いてある部分を

	public $default = array(
		'datasource' => 'Database/Mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'database_name',
		'prefix' => '',
		//'encoding' => 'utf8',
	);

こんな風に直せばOKです

	public $default = array(
		'datasource' => 'Database/Mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => '',
		'password' => '',
		'database' => 'test_db',←ここは、みなさんが各自作っていただいたDB名をそのまんま入れていただけば動きます。
		'prefix' => '',
		'encoding' => 'utf8',
	);

これらの設定を全部やると、こんな感じで全部オールグリーンになりました!
f:id:kirin255:20140622232105p:plain

これで、後は好きなだけ、開発ができるってもんです。
ヤッター

git で”fatal: does not appear to be a git repository”という表示がされて、push できなくなって、焦った話

git で、突然使えなくなって焦った

{14-06-24 21:11}MBA:~/webRoot/test_app@fix_task pm1401% git push origin/fix_task

こうやって書いて、本当は、リモートブランチにプッシュしたかったんだけれども、以下の感じで怒られる。

fatal: 'origin/fix_task' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

その際、こんな凄いサイトのお世話にもなった
gitのエラー解決方法 - Shut the fuck up and write some code
GitLabでリポジトリを作成後 push しようとすると does not appear to be a git repository - サーバ管理メモ

で、いろいろやった結果、ついに原因がわかった。
typoだった(爆)ワロエナイ

結果、こう書いたら動いた

{14-06-24 21:11}MBA:~/webRoot/test_app@fix_task pm1401% git push origin fix_task

違いはここ

正){14-06-24 21:11}MBA:~/webRoot/test_app@fix_task pm1401% git push origin fix_task
誤){14-06-24 21:11}MBA:~/webRoot/test_app@fix_task pm1401% git push origin/fix_task

このスラッシュがあるかないか、によって、激しく悩まされていた。
気をつけようと思った(小並感)

【後半】nitrous.ioで、CakePHPを使えるようにするまで

もう息切れしてきた。疲れてきた。
はい、Nitrous.IOの話ですね。

さて、気を取り直して、行きましょう。

f:id:kirin255:20140622183737p:plain
前回のphpinfo()はもう不要なので、消しましょう。
消去!破ァ!!やっぱり、寺生まれは・・・
消えました。これで、もう安心です。

ディレクトリを作るの巻

次は、www直下にディレクトリを作ります。
これは、右クリックでも構いませんし、mkdirコマンドで作ってもらっても構いません。
mkdirコマンドで作る場合は、

mkdir test_app

みたいな感じでオッケーです。

composerをインストールするの巻

作ったら、そのディレクトリ(test_app)でコンポーザーをインストールしましょう。
じゃあ、さっそく、下記コマンドをコンソール部分で実行してみましょう。

curl -sS https://getcomposer.org/installer | php

これで、composerがインストールされます。
※composerは、cakePHPのパッケージ管理をする為のソフトウェアです。これがあると、cake関連のプラグインを入れるのがすっごく楽になります。

composerを使って、プラグインをインストールするの巻

では、次は、このcomposerを使って、プラグインをぶっこみましょう。
と、その前に、composer.jsonを作りましょう。これは、何かといいますと、どのプラグインをインストールするか?を書いた設定ファイルなのです。
え?めんどくさそう?ここまで、見てる貴殿が何を言うでござるかーハハハ(白目)
ただ、安心なされよ。
今回は、スタッフがとりあえず、これで、ええんちゃうかな、っていうcomposer.jsonを用意しました。
なので、下記の文字をそのまんま書けば大丈夫です。

{
    "name": "test-app",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "cakephp/cakephp": "2.4.7",
        "cakephp/debug_kit": "2.2.*",
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

こんなかんじね。
f:id:kirin255:20140622190009p:plain

あとは、下記コマンドを打つだけで、OKっす。

php composer.phar install

無事にうまくいくと、下記画像のようにバシーンと入ります。
f:id:kirin255:20140622215535p:plain

cakeでBakeするの巻

そしたら、もう少しです。
Vendor/bin/cake bake project を打ってみましょう。
僕はこんなかんじにしてみました。

Vendor/bin/cake bake project test_app

で、いろいろ出ると思いますが、今回の方法では下記のようにしました。
f:id:kirin255:20140622220351p:plain

こんな感じにすると、プロジェクト的には、
test_appの中にもろもろのcakeファイルが入るかと思います。

ここまで設定した状態で、再び、下記の画像のようにpreviewの項目からport3000を選ぶと、今度は、cakeの画面が見れるはずです。
f:id:kirin255:20140622184110p:plain

こんなかんじになりました!
f:id:kirin255:20140622220624p:plain
ヤター動いてるー

あと、細かい部分は、色んな所に対策が書かれているので、落ち着いて対処すれば、全部やっつけられます。
やったね!たえc

どうすか!超楽じゃないですか?
ここまで、0円ですよ。
僕は、Nitrous.IOを使って、ちょっと作りたいみたいな奴は遊んでいこうかなーと思います。

オマケ書きました!
【おまけ】nitrous.ioで、CakePHPを使えるようにする【エラー潰し】 - 手が震えたらBARに行こう

【前編】nitrous.ioで、CakePHPを使えるようにするまで

はい、前回の続きです

Nitrous.IOの話ですね。

では、早速、Boxを作ってみましょう。(この画面は左上のboxというリンクをクリックすると飛べます。)
f:id:kirin255:20140622182250p:plain

ここでいう、Boxというのは、VPSみたいなもんです。
なので、これからVPSインスタンスを作るみたいに思ってもらえればと思います。
じゃあ、早速、NewBoxを押してみましょうか。

押してみると、こんな画面になると思います。
f:id:kirin255:20140622182636p:plain
今回は、CakePHPを動かすので、PHPを選びましょう。

で、設定項目ですが、一応まとめてみました。
- Name
特に弄る必要なし
- Region
特に弄る必要なし
- Memory
最初は384Mで十分でしょう。
- storage
ストレージですが、これも1000Mでもいいと思います。
しかし、もうこの段階で、N2Oがいっぱいな気もします。
前回ちらっと紹介したN2Oを増やす手段を使って、もう少し余裕がでているようであれば、もう少し増量しておくのも良いかもしれません。
そんなわけで、準備が終わったら、画面下部にありますCreate Boxのボタンを押して、インスタンスを作ってしまいましょう。
設定に問題なければ、下記の画面がでて、インスタンスを作ってくれます。
f:id:kirin255:20140622183116p:plain

そして、これが終わると、こんな感じの画面になります。
f:id:kirin255:20140622183338p:plain
これで、ようやく、インスタンスができました。
下の画面はコンソール入力画面です。こちらでもある程度操作はできるようになっています。
コンソール派の人も納得納得ですね!

後は、開発じゃー!
の前に、phpinfoしてみましょうか。
f:id:kirin255:20140622183737p:plain
画面左端のファイルがいろいろ書いてある中のwwwディレクトリの直下にindex.phpというファイルを作ります。

そして、この中に下記のように書きます。

<?php phpinfo() ?>

f:id:kirin255:20140622184110p:plain
これで、後は、上の画像のように、画面上部のpreviewからPort3000を選択すれば、
f:id:kirin255:20140622184239p:plain
こんな感じで、もうphpinfoが見れます。
(画像中でthis is testってやってるのは、俺が本当にこんな簡単でいいのか、と震えて、ちょっとテストした時に入れた文字列です。お気になさらずに)
やったね!タエちゃんかz
簡単!ちょれー!超ちょれー!

という事で、次はcakePHPをとりあえず、動かすところまでのインストールやりましょうか。
後編書きました!
【後半】nitrous.ioで、CakePHPを使えるようにするまで - 手が震えたらBARに行こう


使ったサービス Nitrous.IO

【導入編】nitrous.ioで、CakePHPを使えるようにするまで

お疲れ様です。

Nitrous.IO
っていうサービス知ってますか?

このサービスは無料でお手軽にwebサービス用のプロトタイプサーバを建てることができるサービスです。
対応している言語は、Ruby, Node.js, Python, GO, PHPの5種類で、現在webで主要となっている言語はほぼほぼ揃っています。
やばい、強そう(小並感)
f:id:kirin255:20140622171245p:plain

特に、
「サーバの設定とか、ようわからん。」
「俺は、とにかく、アプリを早く書いて、動く所を見せたいの!」
なんて人にはピッタリかも知れません。

特徴的なのは、N2Oというサービス内通貨を使って、サーバのメモリやHDDといったパラメータを割り振ります。
f:id:kirin255:20140622171911p:plain
(余談ですが、N2Oってのは、亜酸化窒素から来てるらしくて、レーシングマシン等で、急加速する時に使う燃料の様なものらしいです。
ニトロダッシュとか呼ばれてるヤツですね。)

そして、このN2Oですが、最初は、155しかもらえないのですが、下記の様なミッションをクリアしていくと、どんどん追加で、付与されるようです。
f:id:kirin255:20140622172346p:plain
金の力が一番強かった・・・虚無感


今なら、こちらのURLから登録してもらえると、N2Oが僕も10もらえて、登録していただいて人も10もらえるので、よかったらどうぞってカンジです。
Nitrous.IO
はい、宣伝終わり

今回は、これを使って、とりあえずcakePHPを動かす所まで、漕ぎ着けたいと思います。

このお手軽さで、動いているサービスを見せられるのであれば、スタートアップとかで、これから、デモ見せて、資金調達を・・・なんてワイルドな人にとっては、うってつけかもしれません。
なにぶん、最初は、メモリとかHDD容量とかはかなり少なめなんだけれども、でも、指で数えるくらいの人が見るぐらいで、しかも料金はタダとくれば、これを選ばない手はないでしょう。

長いと、前編、後編になるかも。。。
前編、書きました!
【前編】nitrous.ioで、CakePHPを使えるようにするまで - 手が震えたらBARに行こう
後編、書きました!
【後半】nitrous.ioで、CakePHPを使えるようにするまで - 手が震えたらBARに行こう