Help us understand the problem. What is going on with this article?

Express4 + mongoDBアプリケーションをherokuで動かす

More than 5 years have passed since last update.

herokuって何かとは説明しません。
今回これを達成するためにいくつか問題点を解決します。

package.json

dependenciesに記述したmoduleはrequireできるようになる。なのでdevDependenciesにあるものなどはdependenciesに書き換えておく。
ただ、それだけでは動かない。
同じフォルダにProcfileを作る。これはherokuで動かすコマンドを記述し、デプロイした後にコマンドを送れば実行してくれる。

(Procfile)
web: npm start --production

これによってpackage.jsonのstartに記述したコマンドが実行されることになる。developmentとproductionを切り替える場合は--productionをつける。express4でpackage.jsonのstartには

package.json
          "scripts": {
            "start": "node ./bin/www"
          },

と記述されているが、これで良い。wwwの中を見ると、httpのlistenと、app.jsを読み込むようになっている。app.jsに普段のnodeを記述しておけばok。

念のためpackage.jsonにはdependenciesのバージョンを書き換えておく。使用しているvesionを使える感じに末尾の数字をXにする。
とくにnodeとnpmのバージョンは堅牢にするために以下のように追加

package.json
          "engines": {
            "node": "0.10.X",
            "npm": "1.4.X"
          }

.gitignore

gitで無視
echo 'node_modules' > .gitignore

herokuへdeploy

mongoDBを使う設定をするために一度heroku createまでやる。

heroku login
git init
git add .
git commit -m "init message"
heroku create
    # heroku info, list, etc..
git push heroku master
heroku ps:scale web=1

6行目まではテンプレなので覚える。gitの意味は説明しない。
heroku createした時点で色々情報が出てくる。忘れてしまったら、heroku info とかコマンドで見れます。使い方はheroku helpで。
用意しておいたProcfileのコマンドを呼ぶ?のが7行目です。heroku内で何がおきているかは

heroku logs
heroku logs -t

で見れます。heroku help充実してるんでもっと見ていきたい。

さてアクセスできないmongoDBのレンタル先を探しにいこう。

mongolab

herokuにはmongoDBを使うためのaddonsが提供されている。使えるaddonsはheroku addons:listで見れる。

heroku addons:add [使うaddon]:free

とすると無料版を使える。heroku idにクレジットカード情報を登録していないと、ほとんどのaddonは使えないので、登録します。さて今回使うaddonはmongolabを使えるようにheroku addons:add mongolab:freeをする。
するとheroku内の環境変数にuriが追加されている。

heroku config
heroku config | grep MONGOLAB_URI

環境変数の一覧はheroku config。開発環境と本番環境のNODE_ENV変数の確認にも使える、説明はしない。
2行目で出てくるURIが見慣れたmongoDBアクセスURIだ、これをnode内のmongoDBアクセス設定に追加すればよい。

追加した後に改めて、git add . > git commit -m "second" > git push heroku master でコミットすれば完了だ!

たとえば以下のようにapp.jsを動かせばmongoDBアクセスを確認できる。

app.coffee
mongoose = require "mongoose"
mongoose.on "open", () -> console.log "success"
mongoose.on "error", () -> console.log "failed access"
mongoose.connect "取得したURI"
mongoose.disconnet()

なおデータベースの状況は
herokuにアクセス > 使用application > addons > MongoLab >
で確認できる。

さあ、これで今日からheroku open!!

runtBlue
働きたい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away