在文件中main.html,在Play创建的默认项目中!,有这条线:
#{get 'moreStyles' /}
Run Code Online (Sandbox Code Playgroud)
我明白如果我需要添加更多样式,在我的视图脚本中,我必须使用
#{set tag:'value' /}
Run Code Online (Sandbox Code Playgroud)
tag应该在哪里moreStyles,但似乎要将值设置为完整的HTML <link>标记.如果视图需要添加更多样式或脚本会发生什么?
谢谢!
最初的Play Framework 1.x拥有一个优雅而简单的模块管理系统.与Play存储库相结合,它是使用第三方组件和库快速增强应用程序的好方法.
使用Play 2.0,情况就大不相同了.
如何贡献所谓的" 模块 "?
我现在知道2:
我目前正在通过以下方式获取相对URL路由作为String:
String url = controllers.directory.routes.Directory.viewOrganisation( org.id ).url();
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想得到完整的绝对网址.我确信这很简单,我似乎无法找到它.
或者,如何在视图中获取当前域以添加到相对URL?
在官方的akka 2.0.4文档中,它说:
actor重新启动只替换实际的actor对象; 邮箱的内容不受重新启动的影响,因此在postRestart挂钩返回后将继续处理消息.将不再接收触发异常的消息.在重新启动时发送给actor的任何消息都将像往常一样排队到其邮箱.
假设我有一条消息导致我的演员重新开始.它不再存在于邮箱中,因此它不会被将要占据它的角色处理.如果我希望这个消息由演员处理(假设在这种情况下顺序无关紧要),演员在重启时将消息发送给自己是不是一个坏主意?
一些(伪)代码显示我的意思:
class ResendingActor extends Actor {
var curMessage: Option[MyMessage] = None
def receive = {
case MyMessage(x) => {
curMessage = Some(MyMessage(x))
/* processing */
curMessage = None
}
}
override def preRestart(reason: Throwable, message: Option[Any]) {
curMessage match {
case Some(x) => self ! x
case None => ;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,在重新启动之前,actor未处理的消息被推送到新actor的队列末尾.
所以我的问题是:我有什么理由不这样做吗?
我唯一能想到的是,如果消息由于某种原因而变形,它将永远不会离开系统并导致演员经常重启...
我想创建单元测试,涵盖在Play框架2.1.0中使用关系数据库的代码.这有很多可能性,所有原因都有问题:
Play框架文档建议在H2内存数据库上运行单元测试,即使用于开发和生产的主数据库使用其他软件(即MySQL):
app = Helpers.fakeApplication(Helpers.inMemoryDatabase());
Run Code Online (Sandbox Code Playgroud)
我的应用程序不使用复杂的RDBMS功能,如存储过程,大多数数据库访问情况是ebean调用,因此它应该兼容MySQL和H2.
然而,在变阵创建表的语句中使用MySQL特定的功能,如指定ENGINE = InnoDB,DEFAULT CHARACTER SET = utf8等我担心我是否会删除这些专有部分CREATE TABLE,MySQL将使用一些默认设置,我无法控制和依赖的版本,所以测试和开发应用程序主MySQL配置必须修改.
任何人都使用这种方法(使evolutions与MySQL和H2兼容)?
其他想法如何处理:
create table(MySQL兼容模式不起作用,它仍然会抱怨default character set).我不知道怎么回事.H2内存数据库的唯一优势是它速度快,并且在与dev/production数据库相同的数据库驱动程序上进行测试可能会更好,因为它更接近真实环境.
如何在Play框架中完成?
尝试:
Map<String, String> settings = new HashMap<String, String>();
settings.put("db.default.url", "jdbc:mysql://localhost/sometestdatabase");
settings.put("db.default.jndiName", "DefaultDS");
app = Helpers.fakeApplication(settings);
Run Code Online (Sandbox Code Playgroud)
看起来像evolutions在这里工作,但在每次测试之前如何最好清理数据库?通过创建截断每个表的自定义代码?如果它会丢弃表格,那么演化会在下一次测试之前再次运行,还是每个play test命令应用一次?或者每次Helpers.fakeApplication()调用一次?
这里的最佳做法是什么?听说dbunit,有没有可能整合它没有太多的痛苦和怪癖?
unit-testing database-testing playframework playframework-2.0
有两个班级Foo和Bar.Foo包含一个字段Bar.问题是,如何Writes为类实现隐式json Foo?
这是代码:
package models
import play.api.libs.json._
case class Foo(id: String, bar: Bar)
object Foo {
implicit val implicitFooWrites = new Writes[Foo] {
def writes(foo: Foo): JsValue = {
Json.obj(
"id" -> foo.id,
"bar" -> foo.bar
)
}
}
}
case class Bar(x: String, y: Int)
object Bar {
implicit val implicitBarWrites = new Writes[Bar] {
def writes(bar: Bar): JsValue = {
Json.obj(
"x" -> bar.x,
"y" -> bar.y …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Scala应用程序,包括一个库项目(让我们称之为common),一个Thrift服务器项目(让我们称之为server)和一个Play Web应用程序项目(以下称为web).这三个都是用Scala编写的,并用sbt构建.
我的项目结构如下所示:
myproject/
-common/
...
-server/
...
-web/
-app/
-conf/
...
-project/
-Build.scala
-build.properties
-build.sbt
Run Code Online (Sandbox Code Playgroud)
我的build.sbt文件(简化了一下)看起来像这样:
import play.Project._
name := "myproject"
version := "1.0-SNAPSHOT"
lazy val common = project
lazy val web = project
.settings(playScalaSettings: _*)
.dependsOn(common)
lazy val server = project
.dependsOn(common)
lazy val root = project.in(file("."))
.aggregate(common, web, server)
Run Code Online (Sandbox Code Playgroud)
这个问题是根项目不是Play项目,所以play命令不起作用(它出错了
java.lang.RuntimeException: */*:playRunHooks is undefined.
at scala.sys.package$.error(package.scala:27)
Run Code Online (Sandbox Code Playgroud)
如果我在SBT文件中的行playScalaSettings之后插入行,我可以通过使根项目看起来像Play项目来解决这个version问题,但是我有另一个问题:该play run命令尝试运行根项目,而不是web子项目.显然,该play …
我不知道如何以GuiceApplicationBuilder这种方式配置,我能够加载需要DatabaseConfigProvider注入的控制器.
我想指定一个替代的postgres数据库用于测试,或者在内存数据库中指定(如果可能的话).
码
class User
extends MySpecs
with OneAppPerTest
{
override def newAppForTest( testData: TestData ) = new GuiceApplicationBuilder()
// Somehow bind a database here, I guess?
.build()
"A test" should "test" in
{
val result = Application.instanceCache[api.controller.User]
.apply( app )
.list()( FakeRequest() )
...
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
[info] - should return an entity *** FAILED ***
[info] com.google.inject.ConfigurationException: Guice configuration errors:
[info]
[info] 1) No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
[info] while locating …Run Code Online (Sandbox Code Playgroud) 它已经花了很长时间在一个游戏应用程序上工作,现在是时候部署它了.这是我的第一次,所以我有点失落.哪个托管公司是最好的,并提供良好的价格?
playframework ×10
scala ×4
java ×3
akka ×1
deployment ×1
guice ×1
hosting ×1
json ×1
module ×1
play-slick ×1
sbt ×1
slick ×1
templates ×1
unit-testing ×1