在Predix上运行Scala的HelloWorld
Scala语言的名称来自于“可伸展的语言”,Scala 是一种函数对象混合的语言。它可以运行在Java平台上,Scala程序会被编译为JVM的字节码。它们的执行期性能通常与Java程序一致。Scala代码可以调用Java方法,访问Java字段,继承自Java类和实现Java接口。
Scala是一种把面向对象和函数式编程理念加入到静态类型语言中的混血儿。Scala的许多不同的方面都展现了面向对象和函数式编程的熔合。在可伸展性方面,这两种编程风格具有互补的力量。Scala的函数式编程使得它便于快速地从简单的碎片开始建立一些有趣的东西。它的面向对象特性又使它便于构造大型系统并使它们适应于新的需求。Scala中这两种风格的组合使得它有可能表达新的编程模式和控件抽象。并产生了易读、简洁的编程风格。由于它良好的延展性,用Scala编程将会有很多的乐趣。
下面将介绍如果把一个Scala的HelloWorld程序部署运行在Predix平台上.
首先准备好一个Scala应用, 可以参考下面这个模板使用git clone
复制到本地:
$ git clone https://github.com/noru/predix-scala-helloworld.git
注意, 上面的模板代码中的manifest.yml
指定了Scala在Predix上使用的buildpack为:
https://github.com/heroku/heroku-buildpack-scala.git
这是一个第三方提供的buildpack, 使用中需要遵循一些规定. 比如, 它会默认执行sbt compile stage
来打包, 请保证自己应用的build.sbt
包含这个任务. 或者像示例代码中, 使用sbt-native-packager
(https://github.com/sbt/sbt-native-packager)来自动包含一个stage
任务, 同时在打包结果中也会自动包含一个启动脚本, 一般在target/universal/stage/bin/
文件夹下面, 与应用程序同名. 这个脚本就可以作为启动命令, 放在manifest.yml
或者Procfile
文件中:
// in manifest.yml
- comment: target/universal/stage/bin/hello-scala
// or in Procfile
web: target/universal/stage/bin/hello-scala
另外一种发布方式是, 利用Scala与Java的无缝连接, 直接使用java buildpack. 这种方式需要提前打包好你的应用程序. 本文里不再详述.
推送hello-scala应用到Predix上
和推送其他应用一样,我们用cf push
就可以完成应用的推送. 由于模板中已经有了manifest.yml
, 所以不必指定任何参数.
$ cd hello-scala
$ cf push
查看hello-scala应用
当部署完成hello-scala应用后,我们就可以从cf push
命令的输出中获取该应用的URL。如下面注释标出的地方:
... 其他命令行输出 ...
requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: hello-scala.run.aws-jp01-pr.ice.predix.io // <-- 访问APP的url
last uploaded: Sun Jul 2 05:25:14 UTC 2017
stack: cflinuxfs2
buildpack: https://github.com/heroku/heroku-buildpack-scala.git
state since cpu memory disk details
#0 running 2017-07-02 01:26:24 PM 0.0% 281.7M of 512M 164.3M of 350M
在浏览器中键入这个地址, 就能够看到我们Scala程序的输出了:
小结
Scala运行于JVM, 并兼容现有的Java程序, 甚至还有.NET平台的实现. 得益于此, Scala程序可以方便的部署运行在各种环境中, 在Predix中也不例外, 只需要指定一个合适的buildpack. 喜欢面向对象与函数式变成相结合的独特魅力的开发人员, 可以在Predix平台上轻松开始工业互联网应用的开发.