環境構築で最近はまった事のまとめ
サーバ側の環境構築してる時に最近はまっていたことをいくつか
Apacheのプロセスがどのユーザで起動されているか確認する
Linux/BSDな環境のサーバ管理している人には常識なんだろうけど、実はこれがすぐわからなかった。こちらのページ見たらpsコマンドの一覧まとめていて「u」オプション付けることでプロセスの実行ユーザ確認できるとのこと。なので
ps aux | grep apa
みたいな感じにすればOK
Sinatraのクエリーパラメータ取得した後に、数値→時刻への変換処理でErrorになる
実はこれに随分悩まされた。やりたかったことは
http://h5y1m141.info/entry/oyamada/1330000000
みたいなURLにアクセスした時に、
- ブロガー名:oyamada
- ブログの投稿日:Unix time(=1330000000)を変換して得られる結果。具体的には2012-02-23 21:26:40 +0900 以降。
というクエリーを発行して該当するエントリをDBから得ることをやろうと思ってました。
require 'sinatra' get '/entry/:blogger/:num' do t = Time.at(params[:num])
みたいな感じでクエリーパラメータ取得して変換すればOKかと思っていたのですが「TypeError - can't convert String into an exact number:」と怒られてしまいました。params[:num]を数値変換すれば良かったみたいで、具体的には
require 'sinatra' get '/entry/:blogger/:num' do t = Time.at(params[:num].to_i)
で解決しました。
ただ、http://h5y1m141.info/entry/oyamada/1330000000 みたいなURLにアクセスしてデータ取得するよりも、DBのlimit句などを駆使してpagination実装したほうがシンプルなことについさっき気づいたので、このURLにアクセスするのはやめることにしようと思います
MongoDBのpagination
どうやるんだろうとググっていたら、Stack Overflowにそのものズバリなことがあったけど1年ほど前にすでにはてブしてたのを忘れていた・・
MongoDBインストールしたLinux上でmongoシェル起動して
db.entries.find({"blogger":"oyamada"},{"title":1}) { "_id" : ObjectId("4f860b45b8dac929af000001"), "title" : "まずは、自己紹介" } { "_id" : ObjectId("4f86114db8dac92c71000001"), "title" : "まずは、自己紹介" } { "_id" : ObjectId("4f86114fb8dac92c71000003"), "title" : "新しい職場で働く時" } { "_id" : ObjectId("4f861152b8dac92c71000005"), "title" : "Relax" } { "_id" : ObjectId("4f861154b8dac92c71000007"), "title" : "イチローにみるリーダーシップ" } { "_id" : ObjectId("4f861156b8dac92c71000009"), "title" : "Sun Grid から見るネットワークインフラ展望" } { "_id" : ObjectId("4f861158b8dac92c7100000b"), "title" : "何を勉強するか考える前に" } { "_id" : ObjectId("4f86115bb8dac92c7100000d"), "title" : "MicrosoftのOfficeの牙城を切り崩そうとするサービスの登場" } { "_id" : ObjectId("4f86115db8dac92c7100000f"), "title" : "メールとの付き合い方" } { "_id" : ObjectId("4f86115fb8dac92c71000011"), "title" : "お金のことについて" } { "_id" : ObjectId("4f861161b8dac92c71000013"), "title" : "セミナーやイベント参加時のちょっとした準備" } { "_id" : ObjectId("4f861163b8dac92c71000015"), "title" : "オープンソースといえば?" } { "_id" : ObjectId("4f861166b8dac92c71000017"), "title" : "お客さんの期待感" } { "_id" : ObjectId("4f861168b8dac92c71000019"), "title" : "身になる読書のための5つのTips" } { "_id" : ObjectId("4f86116ab8dac92c7100001b"), "title" : "パッケージングの妙" } { "_id" : ObjectId("4f86116cb8dac92c7100001d"), "title" : "実務経験xx年以上という”モノサシ”" } { "_id" : ObjectId("4f86116fb8dac92c7100001f"), "title" : "Winny対策PC導入。でもその前に・・" } { "_id" : ObjectId("4f861171b8dac92c71000021"), "title" : "時間の流れの見方を変えてみませんか?" } { "_id" : ObjectId("4f861173b8dac92c71000023"), "title" : "情報漏えい対策セミナー" } { "_id" : ObjectId("4f861175b8dac92c71000025"), "title" : "情報漏えい対策セミナーまとめ" }
となっている状況で先頭の5件取得するには
db.entries.find({"blogger":"oyamada"},{"title":1}).skip(0).limit(5) { "_id" : ObjectId("4f860b45b8dac929af000001"), "title" : "まずは、自己紹介" } { "_id" : ObjectId("4f86114db8dac92c71000001"), "title" : "まずは、自己紹介" } { "_id" : ObjectId("4f86114fb8dac92c71000003"), "title" : "新しい職場で働く時" } { "_id" : ObjectId("4f861152b8dac92c71000005"), "title" : "Relax" } { "_id" : ObjectId("4f861154b8dac92c71000007"), "title" : "イチローにみるリーダーシップ" }
でOK。6件目から10件目を取得したい場合には
db.entries.find({"blogger":"oyamada"},{"title":1}).skip(5).limit(5) { "_id" : ObjectId("4f861156b8dac92c71000009"), "title" : "Sun Grid から見るネットワークインフラ展望" } { "_id" : ObjectId("4f861158b8dac92c7100000b"), "title" : "何を勉強するか考える前に" } { "_id" : ObjectId("4f86115bb8dac92c7100000d"), "title" : "MicrosoftのOfficeの牙城を切り崩そうとするサービスの登場" } { "_id" : ObjectId("4f86115db8dac92c7100000f"), "title" : "メールとの付き合い方" } { "_id" : ObjectId("4f86115fb8dac92c71000011"), "title" : "お金のことについて" }
でOK。