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

[Scala] 初めてのScala on Play Framework on Heroku

More than 5 years have passed since last update.

目標

scalaをyosemiteに入れて、apiサーバー作って、herokuに上げたいと思います。

vagrantで環境をつくってもいいかなと思いましたが、scalaのコンパイルにやたら時間がかかるということなので、vagrantだと不安、、、一旦Mac本体でやります。

Screen Shot 2014-11-08 at 10.13.01.png

svmのインストール

https://github.com/yuroyoro/svm

/usr/local/bin/ に置きました。

$ chmod 755 /usr/local/bin/svm

お使いのシェルに以下を追記。

export SCALA_HOME=~/.svm/current/rt
export PATH=$SCALA_HOME/bin:$PATH

svmコマンドを叩く。

$ svm                                                   
currently version is

こんな感じになったらOK。

Scalaのバージョンを確かめる
http://www.scala-lang.org/

Scalaをインストール

$ svm install 2.11.4

インストール完了後

$ scala
----
Welcome to Scala version 2.11.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

となると思います。

上記がめんどい場合は

$ brew install scala

or

# ここら落とす
http://www.scala-lang.org/

でOK。

PlayFramworkのインストール

$ brew install play

あんまり考えたくないのでこれでいきました。

ビール絵文字が出てきてCompleteってなったらOKです。

playコマンドを叩いてみる

$ play

Screen Shot 2014-11-08 at 9.51.57.png

$ play new appName

Screen Shot 2014-11-08 at 9.53.55.png

Screen Shot 2014-11-08 at 9.54.05.png

とりあえず動かしてみる

$ cd appName
$ play run

おっせーーー((((;゚Д゚))))ガクガクブルブル
この段階で遅いってマジかよ。。。

Screen Shot 2014-11-08 at 10.02.56.png

開発を進めていくとコンパイルに3分とか5分とか10分とかかかると聞くので、(´ε`;)ウーン…って感じはしますね。

ちなみに、IPアドレスがIPv6で示されているのは仕様なのかな。。。?

localhost:9000にアクセス

Screen Shot 2014-11-08 at 10.04.26.png

こんな画面が見れたらOK.

Git

Gitを入れます。
たいていの場合は入っているかと思いますが、なかったら homebrewかなんかでいれます。
(省略)

$ git init
$ git add .
$ git commit -am "Initial Commit" 

ライセンスが云々言われる場合もありますが、流してagreeしちゃえばOKかと。
Screen Shot 2014-11-08 at 10.09.41.png

Heroku

アカウント

アカウントがない場合はつくります。

heroku toolbelt

herokuコマンドを使うために、heroku toolbeltをインストールします。

Screen Shot 2014-11-08 at 10.15.19.png

heroku にログイン

$ heroku login

heroku に上げる

herokuにアプリを作ります。

$ heroku create app_name
---
Creating app_name... done, stack is cedar-14
https://app_name.herokuapp.com/ | git@heroku.com:app_name.git

ここで表示される git@heroku.com:app_name.git は次で使います。

git に今作ったアプリのリポジトリを登録します。

$ git remote add heroku git@heroku.com:app_name.git 

このherokuの部分は好きな文字列でいいです。
リポジトリの登録名になります。
あとから変更も出来ます。

  • 作成
$ ssh-keygen -t rsa 

とかして、なんとか鍵を作成します。

  • 登録
$ heroku keys:add

参考: https://devcenter.heroku.com/articles/keys

~/.ssh/config 設定

Host heroku.com
  HostName heroku.com
  port 22
  User git
  PreferredAuthentications publickey
  identityfile ~/.ssh/heroku_id_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes

↑例です

もしherokuアカウントを複数使っている場合

$ ssh -v git@heroku.com

あげます

$ git push heroku master

herokuのところは git remote で登録した文字列で。

Screen Shot 2014-11-09 at 10.12.41.png

こんな感じでコンパイルが始まります。
エラーがあればここで弾かれます。

アクセス

herokuアプリのURLにアクセスします。
URLはherokuのマイページやgit push の際のログページに記載されています。
もしくは以下のコマンドでいきます。

$ heroku open

特に何にも設定しなければこんな画面が見れるかと思います。

Screen Shot 2014-11-09 at 10.23.01.png

localで見たあのリッチな画面は production では見れないようです。

コードは app/views/index.scala.html ここに。

postgres に接続

herokuのPostgresに接続できるようにしたいと思います。

  • postgresが使われていることを確認
$ heroku addons
=== app_name Configured Add-ons
heroku-postgresql:hobby-dev  HEROKU_POSTGRESQL_SILVER

もしアドオンがなかったら、

$ heroku addons:add heroku-postgresql --app app_name
  • postgresのurlなどを確認
$ heroku config
=== app_name Config Vars
DATABASE_URL: postgres://hogehoge
HEROKU_POSTGRESQL_SILVER_URL: postgres://hogehoge
JAVA_OPTS: hogehoge
PATH:                         .jdk/bin:.sbt_home/bin:/usr/local/bin:/usr/bin:/bin
REPO:                         /app/.sbt_home/.ivy2/cache
SBT_OPTS: hogehoge

Procfile

デフォルトではないと思うので、アプリケーションのroot直下に作成します。

app_name/Procfile
web: target/start -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.url=${DATABASE_URL} -Ddb.default.driver=org.postgresql.Driver

application.conf

db.default.url="jdbc:postgresql://localhost/XXXXX"
db.default.url=${?DATABASE_URL}

余談

vagrantだと

こんな感じでできますね。いろいろ入ってるし。](http://unok.hatenablog.jp/entry/2013/12/09/093845)

References

colorrabbit
creator.
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