我发现了以下问题/答案:
在Play 2.0 FakeRequest中测试MultipartFormData
但似乎Play 2.1中的情况发生了变化.我试过调整这样的例子:
"Application" should {
"Upload Photo" in {
running(FakeApplication()) {
val data = new MultipartFormData(Map(), List(
FilePart("qqfile", "message", Some("Content-Type: multipart/form-data"),
TemporaryFile(getClass().getResource("/test/photos/DSC03024.JPG").getFile()))
), List())
val Some(result) = routeAndCall(FakeRequest(POST, "/admin/photo/upload", FakeHeaders(), data))
status(result) must equalTo(CREATED)
headers(result) must contain(LOCATION)
contentType(result) must beSome("application/json")
Run Code Online (Sandbox Code Playgroud)
但是每当我尝试运行请求时,我都会得到一个空指针异常:
[error] ! Upload Photo
[error] NullPointerException: null (PhotoManagementSpec.scala:25)
[error] test.PhotoManagementSpec$$anonfun$1$$anonfun$apply$3$$anonfun$apply$4.apply(PhotoManagementSpec.scala:28)
[error] test.PhotoManagementSpec$$anonfun$1$$anonfun$apply$3$$anonfun$apply$4.apply(PhotoManagementSpec.scala:25)
[error] play.api.test.Helpers$.running(Helpers.scala:40)
[error] test.PhotoManagementSpec$$anonfun$1$$anonfun$apply$3.apply(PhotoManagementSpec.scala:25)
[error] test.PhotoManagementSpec$$anonfun$1$$anonfun$apply$3.apply(PhotoManagementSpec.scala:25)
Run Code Online (Sandbox Code Playgroud)
如果我尝试用刚刚路由替换已弃用的routeAndCall(并删除结果周围的Option),我会收到一个编译错误,指出它无法将一个MultipartFormData [TemporaryFile]实例写入HTTP响应.
使用Scala在Play 2.1中设计此测试的正确方法是什么?
编辑:尝试修改代码以仅测试控制器:
"Application" should {
"Upload Photo" in {
val data = new …Run Code Online (Sandbox Code Playgroud) 我找到了一个在没有使用groovy-all jar文件安装Groovy的系统上运行Groovy脚本的示例.我尝试了以下方法:
java -cp src:.:lib/* -jar lib/groovy-all-2.0.1.jar src/com/example/MyScript.groovy
Run Code Online (Sandbox Code Playgroud)
问题是我的脚本依赖于lib目录中的jar以及位于src/com/examples中的另外两个Groovy脚本文件.当我运行它时,它会抱怨所有这些的import语句.我可以通过使用以下方法在安装了Groovy的系统上运行它:
CLASSPATH="src:.:lib/*" groovy src/com/example/MyScript.groovy
Run Code Online (Sandbox Code Playgroud)
如何使用groovy-all jar以这种方式运行Groovy脚本,并为其提供类路径?
我目前正在使用以下Play2/Scala,使用FileUploader Javascript实用程序将文件上传到我的服务器:
def fileUploader = Action(parse.multipartFormData) { request =>
request.body.file("qqfile").map { picture =>
import java.io.File
val filename = picture.filename
val contentType = picture.contentType
picture.ref.moveTo(new File("/tmp",filename))
Ok(Json.toJson(Map( "success" -> "true" )))
}.getOrElse {
Ok(Json.toJson(Map( "error" -> "error occured")))
}
}
Run Code Online (Sandbox Code Playgroud)
我只处理小文件(<10MB),我想使用casbah使用Mongo驱动程序将这些文件直接写入Mongo文档或GridFS.我意识到我可以从磁盘读取保存的文件,但有没有办法从内存中处理这一切而不先在磁盘上缓冲文件?
这里的播放文档建议编写一个自定义BodyParser(http://www.playframework.com/documentation/2.1.0/ScalaFileUpload),但似乎没有任何关于如何编写一个的文档.目前尚不清楚Scaladocs的API /实现是如何工作的.我尝试查找MultiPartFormData源代码以查看它是如何工作的,但我似乎无法在他们的Git仓库中找到它:
https://github.com/playframework/Play20/tree/master/framework/src/play/src/main/scala/play/api/mvc
我搜索了很多,但似乎找不到一个很好的例子.
所以我想创建一张由三张较小图像组成的尺寸为 3600x2280 的大图像。第一个应将大小调整为 1680x1050 并放置在左上角。第二个需要调整为 1920x1200 并立即放置在其右侧(+1680 以上)。第三张图片的大小应调整为 1920x1080 并放置在右下角 (+1680+1200)。左下角将是空白/透明的。
我尝试过在网上搜索的各种命令,并且认为对于三张图像中的两张来说,我已经有点接近如下所示的命令:
convert -define png:size=3600x2280 \( Photos/DSC05525-original.jpg -resize 1680x1050 \) -geometry +0+0 -composite \( Photos/Sydney-Loftus-Train-Station-original.jpg -resize 1920x1200 \) -geometry +1680+0 -extent 3600x2280 test.png
Run Code Online (Sandbox Code Playgroud)
...但这将第二张图像放在第一张图像上(我想是因为它不知道延伸到最后?)。我尝试过 -composite、-gravity 和 +repage 的各种组合,但似乎找不到解决方案。
我正在使用python-crypto API在Python2中编写一个客户端来对XML文件进行数字签名,我有一个用Scala编写的服务,用于验证签名.我的Python代码看起来像这样:
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
from os import urandom
import logging
...
...
Run Code Online (Sandbox Code Playgroud)
要生成密钥(keysize为2048):
self.__key = RSA.generate(self.keySize,urandom)
self.__private_key = self.__key.exportKey()
self.__public_key = self.__key.publickey().exportKey()
with open(pubPath,'w') as fpub:
logging.info("Writing Public Key to %s" % pubPath)
fpub.write(self.__public_key)
with open(priPath,'w') as fpri:
logging.info("Writing Private Key to %s" % priPath)
fpri.write(self.__private_key)
Run Code Online (Sandbox Code Playgroud)
并且用于阅读键:
self.__private_key = fpri.read()
self.__public_key = fpub.read()
self.__key = RSA.importKey(self.__private_key)
Run Code Online (Sandbox Code Playgroud)
并进行数字签名
logging.debug('Data to sign: "%s"' % data)
digest = SHA.new(data.strip()).digest()
return str(self.__key.sign(digest, None)[0])
Run Code Online (Sandbox Code Playgroud)
然后在Scala/Java中,我使用以下内容:
package com.example.security
import com.example.action.ActionRequest …Run Code Online (Sandbox Code Playgroud) 我在 Stack Overflow 和邮件列表上找到了许多帖子,这些帖子记录了 MySQL JDBC 问题,包括时区、日期时间等。但即使如此,我仍然无法弄清楚这一点。我正在使用如下所示的连接字符串:
jdbc:mysql://localhost:3306/BigSense?useLegacyDatetimeCode=false&serverTimezone=UTC
Run Code Online (Sandbox Code Playgroud)
我使用以下方法插入日期:
stmt.setTimestamp(x, s, Calendar.getInstance(TimeZone.getTimeZone("UTC")))
Run Code Online (Sandbox Code Playgroud)
并且日期确实以UTC时间正确存储在MySQL中的DateTime列中。我可以从控制台执行 SELECT 并以我将其发送到服务器的时间格式查看它。问题是当我在 Java/JDBC 中执行 SELECT 时,它出于某种原因将其转换为我的本地时区!我使用如下 Scala 代码:
using(stmt.getResultSet()) {
ret =>
if (ret != null) {
val meta = ret.getMetaData()
var retbuf = new ListBuffer[Map[String, Any]]()
while (ret.next) {
val rMap = scala.collection.mutable.Map[String, Any]()
for (i <- 1 to meta.getColumnCount()) {
rMap += (meta.getColumnLabel(i) -> ret.getObject(i))
}
Run Code Online (Sandbox Code Playgroud)
这是旧的 Scala 代码,所以不要评判我。我意识到我不应该使用 retval 并且有更多的“Scala”方法来写这个:)
无论如何,我已经尝试了一些变化,我检查它是否特别是“时间”列并使用 getTimestamp 代替,无论有没有日历对象选项,我仍然将时间转换为本地时间!
这是针对 BigSense 项目的,我试图在其中支持多个数据库(目前完全支持 Postgres 和 MS SQL),因此我试图使代码尽可能通用/不可知。可以在此处找到我的数据库内容的完整来源:
https://github.com/sumdog/BigSense/blob/master/src/main/scala/io/bigsense/db/DataHandlerTrait.scala
Run Code Online (Sandbox Code Playgroud)
哦,我还尝试了以下方法:
noTimezoneConversionForTimeType=true
Run Code Online (Sandbox Code Playgroud)
并且仍然得到相同的结果。我的本地机器设置为 …
在这个答案的后面,我试图创建一个aws_iam_role允许访问 ECR 的。但是,当我定义以下内容时:
resource "aws_iam_role" "jenkins_ecr_role" {
name = "JenkinsECRRole"
assume_role_policy = <<END_OF_POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecr.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
END_OF_POLICY
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error: Error creating IAM Role JenkinsECRRole:
MalformedPolicyDocument: Invalid principal in policy: "SERVICE":"*"
Run Code Online (Sandbox Code Playgroud)
ecr.amazonaws.com根据 AWS 文档,它看起来是一个有效的委托人。我究竟做错了什么?
amazon-web-services amazon-iam terraform amazon-ecr terraform-provider-aws
所以我在Microsoft SQL 2008中执行以下语句:
SELECT
'UTC' AS timezone,
rel.unique_id AS relay,sns.unique_id AS sensor,
dateadd(MINUTE, datediff(MINUTE, 0, pak.rtime) / ? * ?, 0) AS time,
SUM(CONVERT(FLOAT,dat.data)) AS total
FROM sensor_data dat
LEFT OUTER JOIN data_package pak ON dat.package_id = pak.id
LEFT OUTER JOIN relays rel ON pak.relay_id = rel.id
LEFT OUTER JOIN sensors sns ON dat.sensor_id = sns.id
LEFT OUTER JOIN sensor_types typ ON sns.sensor_type = typ.id
WHERE typ.name = 'Volume' AND dateadd(MINUTE, datediff(MINUTE, 0, pak.rtime) / ? * ?, 0) > …Run Code Online (Sandbox Code Playgroud) 假设我有一个 JSON 模式,它允许像这样的对象:
...
"assetMetadata": {
"type": "object",
"additionalProperties": false,
"properties": { ... }
}
...
Run Code Online (Sandbox Code Playgroud)
所以说我想改变它以允许相同的对象或该特定对象的数组。这里只接受一个数组:
...
"assetMetadata": {
"type": "array",
"description": "...",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {...}
}
...
Run Code Online (Sandbox Code Playgroud)
属性是相同的(它是同一个对象,只是多个而不是一个的选项)。
有趣的是,在我正在进行的项目中,解组器已经可以处理这两种情况(它将单个对象转换为大小为 1 的序列),因此纯粹是验证阻止了我继续前进。我们希望保持与现有 API 的可比性,这就是我现在不能只需要一个数组的原因。
我正在尝试为Play2/Scala中的一个发送/接收JSON的简单REST API编写测试用例.我的测试如下所示:
import org.junit.runner.RunWith
import org.specs2.matcher.JsonMatchers
import org.specs2.mutable._
import org.specs2.runner.JUnitRunner
import play.api.libs.json.{Json, JsArray, JsValue}
import play.api.test.Helpers._
import play.api.test._
import play.test.WithApplication
/**
* Add your spec here.
* You can mock out a whole application including requests, plugins etc.
* For more information, consult the wiki.
*/
@RunWith(classOf[JUnitRunner])
class APIv1Spec extends Specification with JsonMatchers {
val registrationJson = Json.parse("""{"device":"576b9cdc-d3c3-4a3d-9689-8cd2a3e84442", |
"firstName":"", "lastName":"Johnny", "email":"justjohnny@test.com", |
"pass":"myPassword", "acceptTermsOfService":true}
""")
def dropJsonElement(json : JsValue, element : String) = (json \ element).get match {
case …Run Code Online (Sandbox Code Playgroud) 我正在阅读 Doobie 文档并尝试在事务中进行简单的获取或创建。我从第一个查询中获得了一个选项,并尝试getOrElse在 else 中执行一个并运行一个插入,但是我一直value map is not a member of Any在getOrElse调用中获得一个。获取现有行或创建新行instances并在事务中返回该结果的正确方法是什么?
import doobie._
import doobie.implicits._
import cats._
import cats.effect._
import cats.implicits._
import org.joda.time.DateTime
import scala.concurrent.ExecutionContext
case class Instance(id : Int, hostname : String)
case class User(id : Int, instanceId: Int, username : String, email : String, created : DateTime)
class Database(dbUrl : String, dbUser: String, dbPass: String) {
implicit val cs = IO.contextShift(ExecutionContext.global)
val xa = Transactor.fromDriverManager[IO](
"org.postgresql.Driver", dbUrl, dbUser, dbPass …Run Code Online (Sandbox Code Playgroud) 我正在使用AWS的Kubernetes 自动缩放器。我已使用以下命令部署它:
command:
- ./cluster-autoscaler
- --v=4
- --stderrthreshold=info
- --cloud-provider=aws
- --skip-nodes-with-local-storage=false
- --nodes=1:10:nodes.k8s-1-17.dev.platform
Run Code Online (Sandbox Code Playgroud)
但是,自动缩放器似乎无法启动缩放。日志显示它找到一个未使用的节点,但随后不会缩小它,也不会给我错误(显示“无节点组配置”的节点是主节点)。
I0610 22:09:37.164102 1 static_autoscaler.go:147] Starting main loop
I0610 22:09:37.164462 1 utils.go:471] Removing autoscaler soft taint when creating template from node ip-10-141-10-176.ec2.internal
I0610 22:09:37.164805 1 utils.go:626] No pod using affinity / antiaffinity found in cluster, disabling affinity predicate for this loop
I0610 22:09:37.164823 1 static_autoscaler.go:303] Filtering out schedulables
I0610 22:09:37.165083 1 static_autoscaler.go:320] No schedulable pods
I0610 22:09:37.165106 1 static_autoscaler.go:328] No unschedulable …Run Code Online (Sandbox Code Playgroud) scala ×6
java ×4
sql ×3
jdbc ×2
specs2 ×2
amazon-ecr ×1
amazon-iam ×1
autoscaling ×1
buffer ×1
classpath ×1
datetime ×1
doobie ×1
file-upload ×1
groovy ×1
imagemagick ×1
json ×1
jsonschema ×1
kubernetes ×1
montage ×1
mysql ×1
python ×1
rsa ×1
terraform ×1
testing ×1