LoginSignup
13
14

More than 5 years have passed since last update.

Scala + PlayFramework on Heroku + MongoDB

Last updated at Posted at 2015-03-27

Scala + PlayFramework on Heroku + MongoDB

概要

HerokuでScala(Play)動かすのはGetting Started with Scala on Heroku読めばいいです。

けれど「やっぱりDB欲しいよなー」、「スキーマ定義するの面倒だなー」という人はMongoDB使うと良いと思います。

Heroku上で動作させる時のちょっとした手順をまとめました。

※今回はTypesafeのplay-mongo-knockoutというプロジェクトテンプレートを使用しました。

はじめに

事前に以下のものがインストールされ、パスが通っていること。

  • Typesafe Activator
  • git(herokuを利用する場合)
  • heroku toolbelt (herokuを利用する場合)

テンプレート作成

activatorでプロジェクト作成

Windowsの場合

  • activator.batを右クリックし、「開く」をクリックします。

Macの場合

  • activatorを右クリックし、「開く」をクリックします。

後は一緒です。

  1. ブラウザでactivatorのGUIが起動します。
  2. Seedsからplay-mongo-knockoutを選択します。
  3. 任意のディレクトリを選択し、「Create app」をクリックします。
    少し時間がかかるのでゆっくり待ちます。
  4. プロジェクトの作成が完了すると、「Your application is ready!」が表示されます。

MongoサーバをWindowsにインストール

下記サイトからダウンロードしてインストールします。
Install MongoDB on Windows

Mongoサーバを起動

  • dataディレクトリを作成
c:\> md c:\data\db
  • Mongoサーバを起動(※mongod.exeの場所は適宜読み替えてください)
c:\> C:\Program Files\MongoDB\Server\3.0\bin\mongod.exe

実行すると下記のようなログが出力されればOKです。「connection accepted」という文言が表示されるはずです。

2015-03-27T08:36:36.181+0900 I CONTROL  Hotfix KB2731284 or later update is not installed, will zero-out data files
2015-03-27T08:36:36.190+0900 I JOURNAL  [initandlisten] journal dir=C:\data\db\journal
2015-03-27T08:36:36.191+0900 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2015-03-27T08:36:36.208+0900 I JOURNAL  [durability] Durability thread started
2015-03-27T08:36:36.209+0900 I CONTROL  [initandlisten] MongoDB starting : pid=8008 port=27017 dbpath=C:\data\db\ 64-bit host=ws-nagae-PC
2015-03-27T08:36:36.209+0900 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2015-03-27T08:36:36.212+0900 I CONTROL  [initandlisten] db version v3.0.1
2015-03-27T08:36:36.216+0900 I CONTROL  [initandlisten] git version: 534b5a3f9d10f00cd27737fbcd951032248b5952
2015-03-27T08:36:36.219+0900 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1j-fips 15 Oct 2014
2015-03-27T08:36:36.219+0900 I JOURNAL  [journal writer] Journal writer thread started
2015-03-27T08:36:36.223+0900 I CONTROL  [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
2015-03-27T08:36:36.229+0900 I CONTROL  [initandlisten] allocator: system
2015-03-27T08:36:36.232+0900 I CONTROL  [initandlisten] options: {}
2015-03-27T08:36:36.247+0900 I NETWORK  [initandlisten] waiting for connections on port 27017
2015-03-27T08:36:36.707+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50109 #1 (1 connection now open)
2015-03-27T08:36:36.708+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50110 #2 (2 connections now open)
2015-03-27T08:36:36.708+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50111 #3 (3 connections now open)
2015-03-27T08:36:36.712+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50113 #4 (4 connections now open)
2015-03-27T08:36:36.715+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50114 #5 (5 connections now open)
2015-03-27T08:36:36.718+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50115 #6 (6 connections now open)
2015-03-27T08:36:36.722+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50116 #7 (7 connections now open)
2015-03-27T08:36:36.725+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50117 #8 (8 connections now open)
2015-03-27T08:36:36.727+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50118 #9 (9 connections now open)
2015-03-27T08:36:36.730+0900 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:50119 #10 (10 connections now open)

プロジェクトの起動

  • コマンドプロンプロトを起動し、プロジェクトが存在するディレクトリまで移動します。
cd [プロジェクトのルートディレクトリ]
  • activatorを起動します。

Windowsの場合

activator.bat

Macの場合

./activator

ここから一緒です。

  • サーバを起動します。
[play-mongo-knockout] $ run

下記のように表示されれば成功です。

[play-mongo-knockout] $ run

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)
  • http://localhost:9000/にブラウザからアクセスし、画面が表示されることを確認します。
  • Add messageボタンからメッセージが追加することが出来れば成功です。

MongoDB用のGUIクライアント(Windows用)

必要であれば下記ツールでMongoDBのデータを確認出来ます。
MongoVUE

Heroku 上にアップする

  • コマンドプロンプロトを起動し、プロジェクトが存在するディレクトリまで移動します。
cd [プロジェクトのルートディレクトリ]
  • gitリポジトリ作成
git init
git add .
git commit -m "init"
  • Herokuにログインし、新規アプリケーションを作成する
heroku login
heroku create {appname}
  • Heroku 上へpushする
git push heroku master
  • Heroku上のアプリケーションを起動します。
heroku open

アプリケーションへアクセスする

以下のURLでアクセスする

https://{appname}.herokuapp.com/

成功です!
...
...
...
...
と思いきや、Add messageボタンからメッセージを追加しようとしても、動作しないはずです。

ここでHeroku上のログを見てみましょう。

heroku logs

MongoError['No primary node is available!']

というエラーメッセージが表示されているはずです。

MongoDBのDBが無いとか、接続出来ないとこのエラーになります。
そういえば、そもそもDBの設定をしていなかったのでDBに接続出来るわけありませんでした。

次からDBの設定をします。

Heroku上のMongoDBの設定

  • HerokuにMongoDBのアドオン(無料)を追加。
heroku addons:add mongolab

(注意) 無料ですが、事前にクレジットカード情報を登録する必要があります。

  • プロジェクトの直下に下記内容で「Procfile」というファイルを作成します。
web: target/universal/stage/bin/{appname} -Dhttp.port=${PORT} -Dmongodb.uri=$MONGOLAB_URI

(注意) appnameはheroku上の名前ではなく、build.sbtもしくはBuild.scalaのname(プロジェクト名)です。この場合には「play-mongo-knockout」でOKです。

具体例

web: target/universal/stage/bin/play-mongo-knockout -Dhttp.port=${PORT} -Dmongodb.uri=$MONGOLAB_URI
  • 再度gitプッシュし、アプリケーションを起動します。
git add Procfile
git commit -m "add Procfile"
git push heroku master
heroku open
  • 再度ブラウザからアプリケーションにアクセスして動作すれば成功です!

Herokuのドキュメント

ここ読むとそのまま出来ます。コマンドとか分からない時はこれ見ると良いです。
自分のアプリが動作しない場合、一度深呼吸してgetting started通りにサンプルアプリケーションでやってみるのも手です。

Getting Started with Scala on Heroku

備考

MongoDBのデータベースの状況は
herokuにアクセス > 対象application > Add-ons > MongoLab で確認出来ます。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14