Skip to main content.
ce2be(http://ce2.be/)っていう短縮URL作成サービスをずっとサーバ上に置いてて、ページの隅っこで「システム販売致します。お気軽にどうぞー。」って書いてたらとうとう問い合わせキタ━(゚∀゚)━ヨ!


まさか来るとわw
1年くらい前に作った短縮URLサービスのCe2Beの管理画面を久しぶりに見てみたら、アフィリエイトコードとか紹介者コードが付属されたURLばかりに使用されててワロタ。



URLを短くするよりは付属コードを見えないようにして踏ませる為に使ってるだろうなぁ・・・。

あとは類似の短縮URLサービスのURLなんかも混ざっていたので、きっと短縮URLのサービスを作成するにあたって動作の確認とかそういう感じで使ってはるんやろか。

久しぶりにメンテしてみて思ったんですが、こういうシンプルなサービスはやはりMySQLよりMongoDBの方が楽っす。
(・`ω・)

ところで、「このシステム販売しますよー」ってトップページに書いてるんですが未だ連絡無し。
(´;ω;`)カナシス
この1周間、ブログ投稿時のTwitterへの自動投稿が動いてないなぁと思い、投稿時にログを吐き出すようにして調べてみたら、ログ自体が出力されない。

ということは、自動Tweet以前の部分でエラー起きてるなぁと見てみたら、以前に起こった

MongoDB起動しない(´;ω;`) « Demence/Cup
http://blog.rutti.net/category_mongodb/item_1330.html


と同様の現象がまた再発してました。

自動Tweet前に短縮URLを生成するようにしてたんですが、短縮URL生成時にエラーが起こっていたわけで。
で、MongoDBのデータファイルの所有者がまたrootになってたわけで。
で、所有者をmongodbに戻して再起動したら直ったわけで。


うーん、これそもそもの原因はなんでっしゃろか。
3月くらいから少しずーつ作っている自作のアクセス解析サイトですが、最近あんまり手を加えていないので延々とアクセスログだけ溜まっていく日々だったのですが、ひさしぶりにログを確認してみたら

Fatal error: Uncaught exception 'MongoCursorException' with message 'localhost:*****: too much data for sort() with no index. add an index or specify a smaller limit'

っていうエラーが出てました。
このエラーは「アクセス数が多めのサイト」の「1ヶ月分」の「リファラ」を見る時だけ出たのですが、どげんかせんといかんなぁとは思ってるところ。

一応、対象カラムにはインデックスをつけてるハズなんですが・・・なんで「with no index.」とか出るんでしょ?

かと言ってlimitで数を制限してしまうとアクセス解析の意味が無いし・・・。

というわけでちょっと考え中。


[追記]
find()の後にチェーンメソッドでsort()を入れてたんですが、それを外したらエラー出なくなりました。

※PHP
$result = $collection->find($conf,$field)->sort(array("date"=>-1));

$result = $collection->find($conf,$field);


・・・なんで?(´・ω・`)
MongoDBで、「MongoDB::getCollectionNames」っていうメソッドがちゃんと動作しないなーと思ってましたが、MongoDBをアップグレードしたら使えるようになった件。

pecl upgrade mongo
こないだ対処したMongoDBがエラーを起こした時の対処法。
また発生した場合の為にメモメモ。

んで、事の発端はこないだMongoDB使ってるサイトにアクセスしてみたら、

Fatal error: Uncaught exception 'MongoConnectionException'
with message 'Transport endpoint is not connected'

って出たことによります。

mongodbが動いてないようだったので
とりま、mongod start しようとしたら今度は

Starting mongod: all output going to: /var/log/mongo/mongod.log
forked process: 12741

っていうエラー。

仕方ないので、リペアーしてみました。

/usr/bin/mongod --dbpath /var/lib/mongo --repair
だが、それでもダメ。

で、ログを見てみたら、mongodbのデータファイルの所有者がrootになっていた為にパーミッションの都合で開けなかった模様。

どうして所有者が変わったのかは不明ですが、とりあえず所有者をmongodに戻してやると無事に再起動しました。


そういう山なし落ちなし意味なしなお話。
MongoDB落つ

現在は修正済みですが、落ちてた時は起動もできませんでした。
気が向けばエラー内容と対処方法をメモります。


[追記]
メモった。

テスト投稿

 
このブログの記事更新時にTwitterにも自動でツイートするようにしていたのですが、そのツイート時に短縮URLを利用して投稿できるように変更したので、ちゃんと動くかどうかのテスト。


[追記]

Twitterへ自作短縮URLでの投稿テスト

一発成功したお。
おっおっお(^ω^ )
こないだMongoDBで作った短縮URLサービス「Ce2Be」でDBにインデックスを張り忘れてたので、PHPからインデックスを貼る方法のメモ。

詳細についてはここ参照。
インデックス - Docs-Japanese - 10gen Confluence
http://www.mongodb.org/pages/viewpage.action?pageId=5800049


やり方は簡単にまとめるとこんな感じ。
<?php
define('DB_NAME','hoge');
define('DB_TABLE_NAME','hoge_table');

$mongo = new Mongo(); // DB接続
$db = $mongo->selectDB(DB_NAME); // DB名選択
$cl = $db->selectCollection(DB_TABLE_NAME); // コレクション選択

// インデックスの追加
$cl->ensureIndex(array('url' => 1));
$cl->ensureIndex(array('date' => 1));
$cl->ensureIndex(array('code' => 1));

// インデックスの確認
var_dump($cl->getIndexInfo());

// インデックスを削除する場合
$cl->deleteIndex("url");
$cl->deleteIndex("date");
$cl->deleteIndex("code");
?>

短縮URLサービスなんで、URLと日付と短縮コードにそれぞれインデックスを貼ってます。
短縮URLサービス作ってみました。
Ce2Beと書いて「シー・ツー・ビー」です。


こないだサーバにMongoDBをインストールしたので、せっかくだからMongoDBの勉強がてらに何かサイトを作ろうと考えた結果、シンプルな構成の短縮URLサービスにしようと思い立ちました。

主なコストはドメイン代の1,800円くらいですかね。
短いドメインってなかなか見つけるの大変です。

デザインに関しては個人利用なら無料なフリー素材+GIMP2.0で作ったのでコストかかってません。
管理画面も個人利用なら無料のオシャレな管理画面デザインテンプレートであるFree HTML5 Admin Templateを使ってます。

MongoDBの勉強の為とは言いつつも、データ読み込みはMemcachedを使っているのであんまりMongoDBの恩恵を感じない作りになってたり。

デザインとシステム込み込みで、制作期間が1日で済んだのは自分的には上々かなぁと(・`ω・)ドヤッ

短縮URLサービス | Ce2Be
http://ce2.be/

«Prev || 1 · 2 · | Next»