node.jsでmongodbを使ってherokuにデプロイした
激しく苦戦したのでメモがてらに書いておく
まずはheroku上でmongodbが使えるようにする。
ためにクレジットカードをherokuに登録する必要がある。いやだね、これ。
そしたら
heroku addons:create mongolab:sandbox
コマンドを打ち込む。
公式だと手順が一つ前にあるけど、最初なのですっ飛ばす。
heroku config
でMONGOLAB_URIがゲットできる。
あとはこれをmongoのconnectのところに書けばいい。
krdlab.hatenablog.com
ここがわかりやすかったので、丸コピする。動いているか確認するためにちょっとだけ、createServerする。コード全体は下記
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ name: String, point: Number }); mongoose.model('User', UserSchema); //var db_uri = 'mongodb://localhost/hogehoge'; var db_uri = "さっき得たやつ"; mongoose.connect(db_uri); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(process.env.PORT || 8000); console.log('Server running'); var User = mongoose.model('User'); var user = new User(); user.name = 'Hungry'; user.point = 2586; user.save(function(err) { if (err) { console.log(err); } }); User.find({}, function(err, docs) { if(!err) { console.log("num of item => " + docs.length) for (var i = 0; i < docs.length; i++ ) { console.log(docs[i]); } mongoose.disconnect() process.exit() } else { console.log("find error") } });
うーん、まさに何も考えていない。とりあえず、
Procfileを作ったら、とりあえずデプロイ。
usernameとpasswordを聞かれて、正しいのを入力しているのに、ちゃんと通らなかったらぐぐれば出た。(URL忘れたけどheroku authみたいなので出てきたキーをusernameを空欄にしてパスワードに入れれば、できる)
たまにProcfileをpushし忘れて動かなくなったりする。そういうのにすぐ気づけるようになりたい。
さて、これで当然heroku openすればサイトに飛ぶと思った。
Application Error
logを見るとどうやら、データベースにはちゃんと保存できているらしい。
すごいなやんだすえ
process.exit()
process.exit()
process.exit()
このコードは探索が終わると、落ちるようになっているのである。
人のコードを丸コピするのではなく、ちゃんと考えて使えというよい教訓になった。