Open20

Play Framework(Scala)に入門する

リアルにサーモンリアルにサーモン

エラー

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

https://stackoverflow.com/questions/32437585/cannot-find-an-implicit-executioncontext-error-in-scala-js-example-app/32437675

リアルにサーモンリアルにサーモン
  • docker-composeでplay × postgresqlの環境を立ち上げる
  • DB操作はSlick
  • 何かしらのlintツール導入
  • (余裕あれば)render.comにデプロイを試みる -> やっぱりデプロイはHerokuが楽そうかな...
リアルにサーモンリアルにサーモン

render.com
でDockerデプロイのときのメモ

render側で設定した環境変数(env)は、Dockerfile内のARGで参照できるっぽい?

CMD時に使用するsecretなど。

リアルにサーモンリアルにサーモン

デプロイ時、play.evolutions.db.default.autoApply=trueを明示的にセットしておかないとマイグレーションでエラーがでる。

application.conf
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形式の文字列)を使用する場合は、

application.conf
slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"

のようにセットしてDATABASE_URL環境変数に値がセットされるようにすれば良い(もしくは、別の環境変数名でも明示的にセットできる)

https://www.playframework.com/documentation/2.8.x/PlaySlick#Database-Configuration
https://scala-slick.org/doc/3.0.2/database.html#using-a-database-url

リアルにサーモンリアルにサーモン

Slickにて、sortBy()でソートしたクエリのresultをgroupBy()すると、ソートが無効化されてしまう。

Stack Overflowで見つけた回答。

https://stackoverflow.com/a/43317082/12307136

scalaのSeq.groupByで返されるデータはimmutable.Mapになっていて、このデータ構造は順序を持たないっぽい。回答で示されている拡張メソッドを使ったらうまくいったが。。クエリの時点で対応しないといけないのかもしれない。とりあえずこの回答に感謝。

というかやっぱデータ構造をちゃんと学ばないとダメだな。