読者です 読者をやめる 読者になる 読者になる

わさび唐辛子

いざという時のための備忘録

【Scala】activator eclipseができない

ScalaプロジェクトをEclipseで編集可能なプロジェクトに変換する

PlayFrameworkのリファレンスなんかを見てると、サラッとactivatorで

 eclipse

を実行したらOK的に書いてあるけど、イチからScalaプロジェクトを作りたい場合はこれではNGらしい。acivator eclipseしてやると、

 eclipseなんてキーワードないよ!

って怒られる。

 

activator eclipseを実行するためにはプラグインが必要となる。

project/plugins.sbtに

 addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

を書いてプラグインを導入することでactivator eclipseが可能となる。

 

 

【Scala】【PlayFramework】複数のチェックボックスを配置する

コレクションから複数チェックボックスを生成する

 

普通にチェックボックスを配置して、そのON/OFFをサーバサイドで拾う

これは単純。

view内にチェックボックスを置いてname属性を付与し、nameに付与した文字列でFormにbooleanにマッピングしてあげたら良いだけ。

 

コレクションでチェックボックスを配置して、そのON/OFFをサーバサイドで拾う

こっちが本題。

リクエスト時にサーバ内でコレクションを生成し、それをViewに反映させる場合等、それぞれのチェックボックスのnameを動的に生成しないといけない場合に使用する。 

この場合は、以下のようにnameに

 キー + [Value値]

を設定する。

@for(elm <- resForm.list) {
<label><input type="checkbox" name="test[@elm.value]" value="@elm.value" />@elm.chars</label>
}

 

Formでlist(text)にマッピングさせてあげると、フォーム情報を取得する際には、チェックされたチェックボックスのvalue値のみが格納されたListを取得することができる。

【Scala】【Play Framework】読み込むapplication.confを切り替える

application.confを切り替える

 

みんなで開発をしてると、各自の開発環境に合わせたaplication.confが必要となる。

自分の環境に合わせたapplication.confを使いたい。

DB設定とか、DB設定とか、DB設定とか・・・

 

PlayFrameworkも2.4がリリースされたけど、こちらの環境はまだ2.3です。

 

 

activator起動時に以下のようにしてあげるとパスで指定したファイルを読み込んでくれる。

activator -Dconfig.file=【ファイルへのパス】


アプリにアクセスできるのを確認して、これでOKと思ってtestを実行してみたら

今まで出てこなかったようなエラーが・・・

ログを見てみると、DBの向き先が思ってるのと違う!

testの時は指定したファイルの内容を反映してくれないのか!?

 

これはbuild.sbtに以下を追記することで回避可能。

javaOptions in Test += "-Dconfig.file=【ファイルへのパス】"

Windowsではエスケープが必要なので、うっかりしないように。

 C:\\workspace\\xxxx\\conf\\ファイル名

 

ただ、これだと問題が。

元々はリポジトリで管理しているapplication.confを編集したくない

(ミスってそのままプッシュしたり。そのままマージしたり。。)から

わざわざ開発用の設定ファイルを切り分けたのに、

build.sbtなんて編集しちゃったら結局こいつをミスってプッシュしたり、マージしたり、、、

 

ちゃんと解決方法見つけないとなぁ。

【Scala】【Play Framework】同一Form内で複数サブミットボタンを実装する

同一Form内で押下されたボタンに応じて処理を変更する

以下のように、同一Form内に複数のサブミットボタンが存在する場合に、

サーバ側の処理を分岐させたい。

@form(controllers.Sample.execute) {
  <input type="submit" name="btnDelete" value="削除" />
  <input type="submit" name="btnSubmit" value="更新" />
}

 

このような場合、Formオブジェクトにボタンをバインドさせると、

押下されたボタンにのみ値がバインドされ、押下されていないボタンには

Noneがバインドされる。

case class SampleForm(
  btnDelete: Option[String] = None,   // 削除ボタン
  btnSubmit: Option[String] = None    // 更新ボタン
)

 

object Sample extends Controller {
val myForm: Form[SampleForm] = Form(mapping(
"btnDelete" -> optional(text),
"btnSubmit" -> optional(text)
)(SampleForm.apply)(SampleForm.unapply))
 ・
 ・
 ・
def execute {
val form = myForm.bindFromRequest.get (form.btnDelete, form.btnSubmit) match { case (Some(_), _) => // 削除処理 case (_, Some(_)) => // 更新処理 case _ => // 例外処理 }
}
}

(form.btnDelete, form.btnSubmit)は、

削除ボタン押下時に

 (Some(削除), None)

となり、更新ボタン押下時に

 (None, Some(更新))

となる。

【Scala】Play FrameworkのプロジェクトをJenkinsでデプロイ

前回

 【Scala】Play FrameworkのプロジェクトをJenkinsで管理できた - わさび唐辛子

の続きです。

 

ビルド用シェルの変更

以下のように変更する。

${WORKSPACE}/trunk/activator clean
${WORKSPACE}/trunk/activator compile
${WORKSPACE}/trunk/activator test
# --- 追加 ---
${WORKSPACE}/trunk/activator stage
BUILD_ID=dontKillMe ${WORKSPACE}/trunk/target/universal/stage/bin/実行ファイル &

 

activator stage を実行することで、アプリケーションのtargetにuniversalというディレクトリが作成され、そこに実行ファイルが生成される。

詳細は公式ドキュメントを参照。

https://www.playframework.com/documentation/ja/2.3.x/Production

 

あとはアクセスするだけ。

ポートを開けておくのを忘れずに!

firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

【Scala】Play FrameworkのプロジェクトをJenkinsで管理できた

前回は、Play+Jenkinsで自動テストしようとしたけど、うまくいかずに挫折・・・

【Scala】Play FrameworkのプロジェクトをJenkinsで管理する - わさび唐辛子

 

調べものして、反省して、うまくいったので実績を記録。

 

ビルド方法の選択

ビルド方法を「シェルの実行」にし、activatorコマンドを直接実行することでビルド/テストは成功。

${WORKSPACE}/trunk/activator clean
${WORKSPACE}/trunk/activator compile
${WORKSPACE}/trunk/activator test

 

他は前回から変更していません。

f:id:louvre24:20150318213746j:plain

 

結果は以下のとおり。

f:id:louvre24:20150318215428j:plain

 

思ってたのと少し違うけど・・・

Play Frameworkがplayコマンドで動いていた頃のようなJenkins用プラグインが使えるようになるまではこれでしのごうかと思います。

 

 

 

あと、workspace配下がtrunkになっているのも少し気になる。。。

【Scala】Play FrameworkのプロジェクトをJenkinsで管理する

Jenkinsのセッティング

まずはsbtプラグインをインストールする。

f:id:louvre24:20150317224454j:plain

f:id:louvre24:20150317224524j:plain

 

次にsbtの設定。

f:id:louvre24:20150317231632j:plain

 ※後から差し替えたので、ここだけ日本語化されている・・・

 

プロジェクトの作成

f:id:louvre24:20150317224708j:plain

f:id:louvre24:20150317224742j:plain

f:id:louvre24:20150317224825j:plain

f:id:louvre24:20150317224833j:plain

 

これで準備は整ったはず。

 

 結果は、、、

 

ビルド成功!!!

f:id:louvre24:20150317231717j:plain

 

と思ったら、テストが実行されていない!?

テストの実行が解決したら更新します。

 

2015/03/18 追記

一応何とかなりました。

【Scala】Play FrameworkのプロジェクトをJenkinsで管理できた - わさび唐辛子