我使用playframewok开始使用光滑和scala
我已经使用play-slick 0.5.0.8将我的项目配置为使用play 2.2.0
我的问题是我无法执行一些基本方法,例如"list,foreach,for {} yield ..."
我试过一个独立的例子,它使用相同的光滑版本1.0.1?
这是项目构建文件
import sbt._
import Keys._
import play.Project._
object Build extends Build {
val appName = "homePage"
val appVersion = "1.0-ALPHA"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
"com.typesafe.play" %% "play-slick" % "0.5.0.8" ,
"postgresql" % "postgresql" % "9.1-901-1.jdbc4",
"com.typesafe.slick" %% "slick" % "1.0.1"
)
val main = play.Project(appName, appVersion, appDependencies).settings(
// add web app as
playAssetsDirectories <+= baseDirectory / "webapp"
)
}
Run Code Online (Sandbox Code Playgroud)
package model
import java.util.Calendar …
Run Code Online (Sandbox Code Playgroud) 我想在Scala/Play 2.2项目中尝试OrientDB,它使用SBT来构建.如何将OrientDB集成到此项目中?请记住,我是所有这些技术的新手(我的背景主要是Python/C#/ JavaScript),所以我可以做一些手握:)
如果可能,最好将OrientDB作为托管依赖项安装.如果可用,我还想为数据库提供一个好的Scala API.
从我的应用程序连接到OrientDB服务器的一些示例代码很酷.
编辑:
我尝试过使用OrientDB Play插件,但到目前为止还没有成功.我做的是(根据插件的自述文件):
cd ~/local/play-2.2.1/
git clone git@github.com:ratcashdev/play-with-orientdb.git
cd play-with-orientdb/src
val orientDBVersion = "1.6.4"
到src/build.sbtsbt.version=0.13.0
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1")
play publish-local
"ratcash.net" % "play-with-orientdb_2.10" % "1.0-SNAPSHOT"
到libraryDependencies
项目的build.sbt文件的设置中val orientDBVersion = "1.6.4"
到我的项目的build.sbt文件10000:modules.orientdb.ODBPlugin
play run
最后一步导致错误页面显示以下异常:java.lang.ClassNotFoundException: modules.orientdb.ODBPlugin
.
我有一个基类,我的所有控制器测试都扩展.这是设置的,因此每个单元测试都可以有自己的Fixture来加载.
因此@Before覆盖将检查测试所需的夹具是什么,加载它然后开始测试.
这里的问题是每次重新加载夹具.即使该方法只对数据库进行了选择,也没有改变.
Play Framework使用的内部存储器数据库是H2数据库.我想知道在单元测试完成后是否有办法检查,如果数据库发生了变化,如果没有,则跳过重新加载完全相同的数据.
我尝试过identity_scope,无论如何都会返回null.
我有一个项目设置playframework 2.2.0
和play2-reactivemongo 0.10.0-SNAPSHOT
.我想通过他们的id查询一些文档,方式类似于:
def usersCollection = db.collection[JSONCollection]("users")
val ids: List[String] = /* fetched from somewhere else */
val query = ??
val users = usersCollection.find(query).cursor[User].collect[List]()
Run Code Online (Sandbox Code Playgroud)
作为查询我试过:
Json.obj("_id" -> Json.obj("$in" -> ids)) // 1
Json.obj("_id.$oid" -> Json.obj("$in" -> ids)) // 2
Json.obj("_id" -> Json.obj("$oid" -> Json.obj("$in" -> ids))) // 3
Run Code Online (Sandbox Code Playgroud)
第一个和第二个返回空列表,第三个失败,错误assertion 10068 invalid operator: $oid
.
我有几个SBT 0.13/Play 2.2项目(网站).它们都是多模块,因为它们共享一些共同的功能.这使得他们的项目配置文件既复杂又几乎相同,但并不完全相同.
我希望能够在项目中尽可能多地共享这些配置文件(频繁的播放更新使得5个以上的网站保持最新的王室痛苦,更不用说所有几乎完全相同但不断发展的依赖列表项目).
build.properties和plugins.sbt在各个项目中是相同的,可以通过简单的脚本覆盖.大.
Build.scala比较棘手 - 我想介绍一个像这样的共享基类:
abstract class MyBuildBase extends Build { ... }
Run Code Online (Sandbox Code Playgroud)
在Build.scala中:
object ApplicationBuild extends MyBuildBuild { ... }
Run Code Online (Sandbox Code Playgroud)
为了使其具有任何意义,需要跨项目共享MyBuildBase.scala.这可以通过svn:external来完成,它在目录上运行.这意味着我需要在编译Build.scala时以某种方式使这个共享目录可访问(否则sbt会大声抱怨).
阅读http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Classpaths.html和http://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full -Def.html似乎这应该是可能的.
然而,这是非常不清楚我居然把什么项目/工程/ Build.scala文件实际上做到这一点-我无法找到的一个例子"这是旨在建立一个SBT构建文件和包括SBT构建文件构建中的一些额外的源文件".
有什么建议?
我正在尝试创建一个多项目SBT构建定义.我在run
根项目上执行命令时遇到问题.
文件夹结构如下:
RootProjectFolder
|
|- build.sbt
|- project
|
|-Build.scala
|-plugins.sbt
|
| - play-webapp
Run Code Online (Sandbox Code Playgroud)
该Build.scala
文件的内容是:
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "project-name"
val appVersion = "0.1.0-SNAPSHOT"
lazy val root = Project(id = appName + "-root",
base = file(".")
).aggregate(webApp)
lazy val webApp = play.Project(
appName + "-website", appVersion, path = file("play-webapp")
)
}
Run Code Online (Sandbox Code Playgroud)
当我启动SBT时,我收到以下消息:Set current project to project-name-root
这意味着正确检测到根项目.
当我执行run
命令时,我收到以下错误消息
> run
java.lang.RuntimeException: No …
Run Code Online (Sandbox Code Playgroud) 从play的文档:
由于Play 2.0的工作方式,动作代码必须尽可能快(即非阻塞).那么如果我们还不能生成它,我们应该返回什么呢?回应是对结果的承诺!
所以我不应该直接在动作内部进行数据库调用.当我查看Plays JPA文档时,这让我感到困惑:
每个JPA调用都必须在事务中完成,因此,要为特定操作启用JPA,请使用@ play.db.jpa.Transactional对其进行注释.这将使用JPA Action组成您的操作方法,该操作为您管理事务
这让我有点困惑.如果我遵循文档,我不应该使用数据库调用阻止操作线程.但是,如果操作是创建和管理数据库事务的,那么我是不是通过将工作发送给actor或者以某种方式将工作卸载到另一个线程来丢失该事务?我的意思是,我是scala和play的新手,但我只是看不到事务如何跟随单独的线程.有没有人有解释,或者我应该这样做的方式?我很困惑.
我最近在Play框架中遇到了请求队列的问题.当服务器过载并且无法按时处理请求时,请求将被放入队列中.即使请求者断开连接请求仍然留在队列中并且将由控制器处理.在压力测试期间,控制器甚至在30分钟前就收到了请求.
这会导致拒绝服务.是否可以设置请求队列深度或请求生存时间?
任何其他解决方案也将受到赞赏.
denial-of-service httprequest akka playframework playframework-2.2
我正在玩Play!斯卡拉2.2和我有渲染的一个问题class
在Json
:
我有两个类,一个依赖于另一个,如下所示:
case class Artist(id: String, cover: String, website: List[String], link: String, Tracks: List[Track] = List())
case class Track(stream_url: String, title: String, artwork_url: Option[String] )
Run Code Online (Sandbox Code Playgroud)
他们隐含的作家:
implicit val artistWrites: Writes[Artist] = Json.writes[Artist]
implicit val trackWrites: Writes[Track] = Json.writes[Track]
Run Code Online (Sandbox Code Playgroud)
作者的工作如下:
println(Json.toJson(Track("aaa", "aaa", Some("aaa"))))
println(Json.toJson(Artist("aaa", "aaa", List("aaa"), "aaa", List())))
Run Code Online (Sandbox Code Playgroud)
即如果Artist
有一个空的 list of tracks
.但如果我想这样做:
println(Json.toJson(Artist("aaa", "aaa", List("aaa"), "aaa", List(SoundCloudTrack("ljkjk", "ljklkj", Some("lkjljk"))))))
Run Code Online (Sandbox Code Playgroud)
我得到一个execution exception
:[NullPointerException: null]
你能解释一下我做错了什么吗?谢谢 ;)