play2.1/scala2.10 のプロジェクトを play2.3/scala2.11 に変更した
いろいろ大変だった……
- 参考資料は
- sbt/play → activator ( activator は sbt を含んでるっぽい )
- build.properties / build.sbt / Build.scala のバージョン番号を変えていくだけの簡単なお仕事……
- と思ったら groupID が play から com.typesafe.play に変わってる
- play.Project(...) を Project(...) にする方法は Migration23 ↑ に
api が変わってる
- Mapping の unbind → unbindAndValidate https://github.com/playframework/playframework/commit/a75981b24770d151b9a77cfe5135941d6b73a52c
- PlainResult/SimpleResult => Future[Result]
- とりあえず型を Result にして、エラーが出るなら Future(result) してやればよい
- Cannot find an implicit ExecutionContext なエラーが出る → import play.api.libs.concurrent.Execution.Implicits.defaultContext
- scalax.io への依存がなってエラーる → とりあえず scala.io を使うように変更した。
- specs2 のバージョンが変わって given/when/then のインタフェースが変わったのでむしゃくしゃして全部 scalatest にした(元々2/3くらいscalatestだった)
- scalatest のバージョンを 2.1.7 + scalautils を使う (2.3 から scalatest が公式サポートっぽい? https://www.playframework.com/documentation/2.3.x/ScalaTestingWithScalaTest )
sbt-web
The largest new feature for Play 2.3 is the introduction of sbt-web!!
- 基本 Migration23 のやり方でいいんだけど……
- The Closure Compiler has been replaced. ← これが死ねる。
- bootstrap 2.2.2 の less がコンパイルできなくなってる → bootstrap 2.3.2 にした → jquery のバージョンが上がって htmlunit 死亡 → phantomjs でテストするように変更
- htmlunit から phantomjs に変更したおかげで confirm ダイアログがでる場面でデフォルトfalseを返すようになった → https://github.com/detro/ghostdriver/issues/20
- sbt-rjs(requirejs) は勝手にwebjarsを使ってくれない => RjsKeys.mainConfig := "requirejs.conf" にして app/assets/javascripts/requirejs.conf.js に requirejs.conf({ paths: "jquery": "jquery/jquery"}) みたいなのを書く…
- 当然devモードで使うときもその requirejs.conf.js を読み込んでから requirejs を読み込む
- def requireJsLoad(main: String): Html = Html(s"""""")
- org.webjars.play.RequireJS.setup がよく似た事してて、たぶん将来的には手動でconf設定しなくても自動でできるようになると思われるが、今は無理
- 参考にした sbt-web/sbt-rjs を使ってるプロジェクト https://github.com/satoshi-m8a/play_eccube_api
なんとなく sbt-web/webjars/sbt-rjs は鬼門…… https://github.com/tuplejump/play-yeoman (sbt から外部プロセスとして node/yo/bower/grunt とか呼ぶ sbt プラグイン) か普通に bower/grunt 使ってjavascript界のやり方でライブラリ管理・アセットコンパイルやった方がいいんじゃないだろうか……
dist でできる成果物が違う
これが原因でデプロイスクリプトが死んだ
- 出力位置が dist じゃなくて target/universal
- start スクリプトがなくなって bin/プロジェクト名 みたいなのができてる。中身はactivatorの起動スクリプト
- jar が project_2.10-x.x.x.jar から project.project-x.x.x.jar と project.project-1.0-assets.jar に変更された(assets が別jarに)
- Build.scala の書き方によって conf がjarに含まれる場合と含まれない場合がある? 調査中……
- RUNNNING_PID のできる位置がシンボリックリンクなどを解決した先になった → -Dpidfile.path=${BASE}/RUNNING_PID のように自分で設定する
- javaオプションを勝手に設定してくれる → -Xms1024m なので t1.micro で二つ立てると死ぬ → -J-Xms5m とか自分で設定すると初期値設定が消える
- psコマンドで見たら恐ろしいことになってるのは相変わらず…
- start が消えるのと RUNNING_PID がシンボリックリンクたどるのを解決 https://gist.github.com/nazoking/78d05bb9a5674ef687f3