日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

play frameworkを他の環境で使ったら動かなかった。 sbtのversionが異なる編

エラー内容

Getting org.scala-sbt sbt 0.11.3 ...

:: problems summary ::
:::: WARNINGS
		module not found: org.scala-sbt#sbt;0.11.3

	==== local: tried

	  /usr/local/Cellar/play/2.1.3/libexec/repository/local/org.scala-sbt/sbt/0.11.3/ivys/ivy.xml

	==== Maven2 Local: tried

	  file:///Users/t_arata/.m2/repository/org/scala-sbt/sbt/0.11.3/sbt-0.11.3.pom

	==== typesafe-ivy-releases: tried

	  http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.11.3/ivys/ivy.xml

	==== Maven Central: tried

	  http://repo1.maven.org/maven2/org/scala-sbt/sbt/0.11.3/sbt-0.11.3.pom

		::::::::::::::::::::::::::::::::::::::::::::::

		::          UNRESOLVED DEPENDENCIES         ::

		::::::::::::::::::::::::::::::::::::::::::::::

		:: org.scala-sbt#sbt;0.11.3: not found

		::::::::::::::::::::::::::::::::::::::::::::::



:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.scala-sbt#sbt;0.11.3: not found
Error during sbt execution: Error retrieving required libraries
  (see /usr/local/bin/../Cellar/play/2.1.3/bin/../libexec/framework/sbt/boot/update.log for complete log)
Error: Could not retrieve sbt 0.11.3

ってエラーが出た。
「unresolved dependency: org.scala-sbt#sbt;0.11.3: not found」でぐぐる
http://stackoverflow.com/questions/14989154/org-scala-sbtsbt0-11-3-not-found-when-try-to-run-existing-project
がでた。

なんかsbtのversionが異なるらしい。

んで「適当なディレクトリ」で
$sbt sbt-version
と打ったら
色々ダウンロードが始まった

※play framework projectのディレクトリでやると、path/to/project/build.properties に書いてあるversionを表示するため、注意!!

その後、
$play run

やったか!!??

[info] Loading project definition from /Users/t_arata/Documents/Yamlab/ntt_recipeappserver/project
[warn] 	module not found: play#sbt-plugin;2.0.4
[warn] ==== typesafe-ivy-releases: tried
[warn]   http://repo.typesafe.com/typesafe/ivy-releases/play/sbt-plugin/scala_2.9.2/sbt_0.12/2.0.4/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/play/sbt-plugin/scala_2.9.2/sbt_0.12/2.0.4/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /usr/local/Cellar/play/2.1.3/libexec/repository/local/play/sbt-plugin/scala_2.9.2/sbt_0.12/2.0.4/ivys/ivy.xml
[warn] ==== Typesafe repository: tried
[warn]   http://repo.typesafe.com/typesafe/releases/play/sbt-plugin_2.9.2_0.12/2.0.4/sbt-plugin-2.0.4.pom
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/play/sbt-plugin_2.9.2_0.12/2.0.4/sbt-plugin-2.0.4.pom
[warn] 	::::::::::::::::::::::::::::::::::::::::::::::
[warn] 	::          UNRESOLVED DEPENDENCIES         ::
[warn] 	::::::::::::::::::::::::::::::::::::::::::::::
[warn] 	:: play#sbt-plugin;2.0.4: not found
[warn] 	::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn] 	Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn] 		play:sbt-plugin:2.0.4 (sbtVersion=0.12, scalaVersion=2.9.2)
[warn]
sbt.ResolveException: unresolved dependency: play#sbt-plugin;2.0.4: not found
	at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:214)
	at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:122)
	at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:121)
	at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:117)
	at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:117)
	at sbt.IvySbt$$anonfun$withIvy$1.apply(Ivy.scala:105)
	at sbt.IvySbt.liftedTree1$1(Ivy.scala:52)
	at sbt.IvySbt.action$1(Ivy.scala:52)
	at sbt.IvySbt$$anon$3.call(Ivy.scala:61)
	at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:75)
	at xsbt.boot.Locks$GlobalLock.withChannelRetries$1(Locks.scala:58)
	at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:79)
	at xsbt.boot.Using$.withResource(Using.scala:11)
	at xsbt.boot.Using$.apply(Using.scala:10)
	at xsbt.boot.Locks$GlobalLock.liftedTree1$1(Locks.scala:51)
	at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:51)
	at xsbt.boot.Locks$.apply0(Locks.scala:30)
	at xsbt.boot.Locks$.apply(Locks.scala:27)
	at sbt.IvySbt.withDefaultLogger(Ivy.scala:61)
	at sbt.IvySbt.withIvy(Ivy.scala:102)
	at sbt.IvySbt.withIvy(Ivy.scala:98)
	at sbt.IvySbt$Module.withModule(Ivy.scala:117)
	at sbt.IvyActions$.update(IvyActions.scala:121)
	at sbt.Classpaths$$anonfun$work$1$1.apply(Defaults.scala:955)
	at sbt.Classpaths$$anonfun$work$1$1.apply(Defaults.scala:953)
	at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$58.apply(Defaults.scala:976)
	at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$58.apply(Defaults.scala:974)
	at sbt.Tracked$$anonfun$lastOutput$1.apply(Tracked.scala:35)
	at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:978)
	at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:973)
	at sbt.Tracked$$anonfun$inputChanged$1.apply(Tracked.scala:45)
	at sbt.Classpaths$.cachedUpdate(Defaults.scala:981)
	at sbt.Classpaths$$anonfun$47.apply(Defaults.scala:858)
	at sbt.Classpaths$$anonfun$47.apply(Defaults.scala:855)
	at sbt.Scoped$$anonfun$hf10$1.apply(Structure.scala:586)
	at sbt.Scoped$$anonfun$hf10$1.apply(Structure.scala:586)
	at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49)
	at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
	at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
	at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:41)
	at sbt.std.Transform$$anon$5.work(System.scala:71)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
	at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
	at sbt.Execute.work(Execute.scala:238)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
	at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
	at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
[error] (*:update) sbt.ResolveException: unresolved dependency: play#sbt-plugin;2.0.4: not found
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

( ´・ω・)・・・
次回に続く!!!

play framework で java.io.IOException: No such file or directory

puppetでインストールしたplay framework 2.0.4さんが起動してくれなかった(´・ω・`)

java.io.IOException: No such file or directory
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.createNewFile(File.java:947)
        at xsbt.boot.Locks$.apply0(Locks.scala:34)
        at xsbt.boot.Locks$.apply(Locks.scala:27)
        at scala.collection.mutable.FlatHashTable$class.$init$(Proxy.scala:32)
        at xsbt.boot.Launch$ScalaProvider.<init>(Launch.scala:110)
        at xsbt.boot.Launch$$anonfun$1.apply(Launch.scala:84)
        at org.apache.ivy.plugins.namespace.NamespaceRule.newEntry(Cache.scala:17)
        at org.apache.ivy.plugins.namespace.NamespaceRule.apply(Cache.scala:12)
        at xsbt.boot.Launch.getScala(Launch.scala:86)
        at xsbt.boot.Launch$.run(Launch.scala:49)
        at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:43)
        at xsbt.boot.Launch$.launch(Launch.scala:68)
        at xsbt.boot.Launch$.apply(Launch.scala:14)
        at xsbt.boot.Boot$.runImpl(Boot.scala:25)
        at xsbt.boot.Boot$.main(Boot.scala:15)
        at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.io.IOException: No such file or directory

java.io.IOException: No such file or directory play frameworkでぐぐるとここにたどり着いた
http://stackoverflow.com/questions/10559313/play-framework-installation

なんか権限が足りてないらしい(´・ω・`)
ちょい急ぎだったので、playディレクトリ内
(= /path/to/play-2.0.4/)

  • repositories
  • framework

のディレクトリ権限を777にしたら治った。

もうちょっと原因を深く考えたい。

Play Framework で POST されたデータを受け取る。

play framework 2.0.4 でPOSTデータを受け取ってみました。

参考にしたのは、ここ
(たぶんここでだいたい解決されると・・・w)

ただ、Modelから作ったFormでbindFromRequest.getは出来なかった(´・ω・`)
なんでか調査したいところ。


流れは、

  1. Formを作る。
  2. bindFromRequestのfoldでいろいろする←

以上!

注意点

  1. implicit request => をActionの後にくっつけることを忘れないこと。
  2. import play.api.data._ と import play.api.data.Forms._
package controllers
import play.api._
import play.api.mvc._
import play.api.data._ //←←←
import play.api.data.Forms._ //←←←

import models._ //modelからFormを作成する場合はimportしておくと便利かもしれない。

・
・
・

 def hoge = Action { implicit request => //←←←
  fugafuga
  ・
  ・
  ・
 }

のように。

implicit request => を忘れると、以下のように怒られます\(^o^)/

Cannot find any HTTP Request here

では実践!

今回はModelからformを作成したので、Modelから作成する方針で


/path/to/app/models/user.scala

package models

case class User(
 name :String,
 email:String
){

っていうModel(?)が存在してたとして、

/path/to/app/controllers/user.scala

package controllers

import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._

import models._ 

object User extends Controller {

 val userDataForm: Form[User] = Form (
  mapping( 
   "name" -> text, //textは空文字でも良いrequiredなString型文字列
   "email"-> text,
  )(User.apply)(User.unapply)
 )

 def create = Action { implicit request => 
  userDataForm.fold(
    errors => BadRequest(views.html.errors(errors)), 
    // userDataFormを定義した時のmappingのvalueを参考にValidationを行う。
    // Validationに引っかかったらerrorsの処理を行う。
    userdata => {  //この後で利用する変数名
                   //ここがuserなら↓のuserdata.nameはuser.nameになる。
      println(userdata.name)
      println(userdata.email)
      //ここでPOSTデータを受け取った後の処理を行う。
      //ログインとか
      Ok(views.html.index())
    }
  )
前提
  • /path/to/app/views/errors.scala.html
  • /path/to/app/views/index.scala.html

が存在していること。


こんな感じでデータを受け取ることが出来る。
Modelを作成しなくてももちろんできるので、ここを参考にするといいと思いますた。

あと、Validationのtextとかその他のものはここがすごく参考になりました。


参考:
Play2.0(Scala)でフォームの値を受け取る
Play 2.0 でのフォーム定義

ありがとうございました

Int does not take parameters

なんかエラーが良く出るから確認してみた。


ここをちょっとだけ参考にしました。
http://d.hatena.ne.jp/plasticscafe/20100713/1278993562
(ワタシが今適当なことを言ってても、ここの人のせいじゃありません。)

case class Hoge(...){
 def createUserData: User = {
  hogehoge
 }
}

ってな感じのメソッドを書いてたんだけどこれを

 val user = userhogeinstance.createUserData()

みたいに書いたら

・・・ does not take parameters

と言われてしまいました。

 val user = userhogeinstance.createUserData

これをこんな感じにすると治ったっていうしょーもない話(´・ω・`)w