ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

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()

このコードは探索が終わると、落ちるようになっているのである。
人のコードを丸コピするのではなく、ちゃんと考えて使えというよい教訓になった。