Play Framework(Scala)に入門する
play slickのバージョン依存関係
エラー
Cannot find an implicit ExecutionContext. You might pass
an (implicit ec: ExecutionContext) parameter to your method.
The ExecutionContext is used to configure how and on which
thread pools Futures will run, so the specific ExecutionContext
that is selected is important.
If your application does not define an ExecutionContext elsewhere,
consider using Scala's global ExecutionContext by defining
the following:
implicit val ec: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global
Slick関連
qiitaの記事、めっちゃ参考になった。
- docker-composeでplay × postgresqlの環境を立ち上げる
- DB操作はSlick
- 何かしらのlintツール導入
- (余裕あれば)render.comにデプロイを試みる -> やっぱりデプロイはHerokuが楽そうかな...
特に参考
.gitignore
のために参考
バージョンの依存関係を調べる時に見る
build.sbt
とその他の箇所(ex.application.conf
)などで環境変数を使うときのimport方法の違い
render.com
でDockerデプロイのときのメモ
render側で設定した環境変数(env)は、Dockerfile内のARG
で参照できるっぽい?
CMD
時に使用するsecretなど。
デプロイ時、play.evolutions.db.default.autoApply=true
を明示的にセットしておかないとマイグレーションでエラーがでる。
play.evolutions.useLocks=true
play.evolutions.db.default.autoApply=true
play.evolutions.db.default.autoApplyDowns=true
本番デプロイ時、DBのコネクションに一般的なDB_URL(vendor://user:password@host:port/db
形式の文字列)を使用する場合は、
slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
のようにセットしてDATABASE_URL
環境変数に値がセットされるようにすれば良い(もしくは、別の環境変数名でも明示的にセットできる)
Slickを使った find or insert
jwt-scalaのdocs
Slickにて、sortBy()
でソートしたクエリのresultをgroupBy()
すると、ソートが無効化されてしまう。
Stack Overflowで見つけた回答。
scalaのSeq.groupByで返されるデータはimmutable.Mapになっていて、このデータ構造は順序を持たないっぽい。回答で示されている拡張メソッドを使ったらうまくいったが。。クエリの時点で対応しないといけないのかもしれない。とりあえずこの回答に感謝。
というかやっぱデータ構造をちゃんと学ばないとダメだな。
クエリやリクエストパラメータをactionに渡す前に変換する
デフォルトのエラーをhtmlではなくjsonで返すための設定
application.conf
にplay.http.errorHandler = play.api.http.JsonHttpErrorHandler
を追加する。
How to write readable nested join queries with Slick 3.0