バッチアプリを Play Framework で、あたりを調べてみたり

2017/07/06   #Scala  #Play Framework 
このエントリーをはてなブックマークに追加

バッチをつくるにあたり、Play Framework は使えるのかといったあたりを調べてみた。

メリデメ

Play2.0で作ったアプリの中にバッチ的コマンドラインアプリを組み込んでみる - argius note

メリット
 機能の再利用ができる(特にDAO)
 新しいプロジェクトを作らなくて済む
 デプロイの手間が省ける
デメリット
 サーバプロセスでないので、起動が遅い(常駐化すればOK?)

加えて Play 向けのライブラリが使えたり、たしかにメリットはありそう、な気がする。

どんな感じでやるか

こんな感じで、Akka の Actor ベースでつくれるっぽい。
ScheduledTasks - 2.6.x

http サーバーが起動してしまうのがイマイチ感ある、と思い、

  • SettingsAkkaHttp - 2.6.x
    • play - server - http - port = disabled で対応可能な気がする
      • うまくいかない・・・
      • run -Dhttp.port=disabled してみたが、You have to specify https.port when http.port is disabled と怒られるので、これは https オンリーなアプリにするための設定みたいだ。なので今回のようなケースでは使えない

ハマりポイント

Play を開発モードで起動した場合は1回リクエストが必要

  • Play アプリケーションを開発モードで起動した場合、初回アクセスしないと Play の初期化などが走らないので、スケジュール実行をしかけた Actor も動作しなかった
  • 当然ながらプロダクションモードで起動した場合はこのようなハマりはない
  • 回避策はないし、可能になる見込みもなさげ・・・

本番環境向け設定

何もせずに sbt start するとこんなエラーが出た。

Oops, cannot start the server.
Configuration error: Configuration error[
The application secret has not been set, and we are in prod mode. Your application is not secure.
To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret
          ]
        at play.api.Configuration$.configError(Configuration.scala:155)
        at play.api.Configuration.reportError(Configuration.scala:984)
        at play.api.http.HttpConfiguration$.getSecretConfiguration(HttpConfiguration.scala:237)
:

ApplicationSecret - 2.6.x を読むと、ApplicationSecret というものが必要らしい。

playGenerateSecret でシークレットキーが生成できる。

$ sbt
> playGenerateSecret
[info] Generated new secret: ;fg2>T_0B8toLR?Vg]p</MO3E?]AiHwGWQr9=`tXbzLDJDgiVrZE_areHAORn4Jx
[success] Total time: 0 s, completed Jul 6, 2017 9:14:21 PM

直接 application.conf に書き込むには playUpdateSecret する。

$ playUpdateSecret
[info] Generated new secret: _xyvgmynN]>Mq_bh;i^zsV5A[k0/gWZ`vNG^zV0KFNjcD?]6]P54nWfxv?2vIJy@
[info] Updating application secret in /Users/ryu/Projects/__try/play-batch-trial/conf/application.conf
[warn] Did not find application secret in /Users/ryu/Projects/__try/play-batch-trial/conf/application.conf
[warn] Adding application secret to start of file
[success] Total time: 0 s, completed Jul 6, 2017 9:15:01 PM

トラブルシューティング