剧本工坊(二)——项目准备和启动

项目初始化


数据库


数据库使用 PostgreSQL。其实我认真的考虑了要不要用 SQLite或者 H2,只要手工管理配置,SQLite 可以提供一些非常好的功能,比如不需要预先安装一个数据库服务器,甚至可以每一本剧本一个数据库文件。这更符合桌面软件的使用习惯。
但是简单的搜索了一下相关资源,Slick支持最完善的,仍然是PostgreSQL。当然,我们也有很多数据库访问工具可以用于Play framework,但是作为一个教学项目,我们还是从最常规的开始。
这里不需要过于纠结安装方式,尽量采用最简单的方法。如果是 MacOS,可以用 Homebrew 或 MacPorts 安装,例如 Homebrew:

brew install postgresql


如果是Linux,需要注意的是通常 PostgreSQL 的服务器包含了客户端,但是和开发包是分开安装的,所以无论是 deb 还是 rpm,记得在必要的时候需要同时安装 dev/devel 包。这里不过多展开每一个数据库发行版的安装方式,可以参考 PostgreSQL 官方网站的文档。
对于 MacOS + Homebrew ,我们可以通过 `brew services` 管理 PostgreSQL 的运行,而现代的 Linux ,普遍都使用 systemctl。这里不多介绍,但是如果安装 PostgreSQL 的过程中发生问题,我们需要结合这些工具进行管理和监控。
为了接下来的编程方便,我们需要一个有限权限的应用用户,创建用户很简单,但是如果我们需要从外部访问,应该先修改数据库服务的安全配置,提供访问规则)——如果服务和应用在同一台机器上,可以跳过这一步。通常来说,如果是 Mac + Homebrew ,数据库存储在 `/usr/local/var/postgres `,而如果是 Linux ,可以用 psql 命令行进入 postgres 数据库,然后执行`show data_directory;`找到数据存储的目录:

postgres=# show data_directory;
       data_directory
-----------------------------
 /var/lib/postgresql/13/main
(1 row)

通常,我会在我的开发环境中创建一个与我当前操作系统用户同名的超级用户,*不设口令*:

create user mars superuser;


一般来说,PG 默认本地用户使用操作系统集成验证,这样我就有了一个便于开发的超级用户。如果需要建立一个受限的应用用户(例如我们需要一个名为 scripts的用户),可以执行以下命令:

create user scripts with login password 'scripts';

编程语言和框架


前面介绍过,我们这个项目使用 Scala 和 Play framework。那么,在版本上,也就采用 Play 的最新发布版本,及其支持的最高版本的 Scala,具体来说就是 Play 2.8 和 scala 2.13.6 以及 Java 15。
为了工作和学习的需要,我经常要在开发机上维护很多个不同版本的Java和Scala。习惯自己手工下载和管理 JDK,最近发现sdkman是一个很方便的选择。SDKman 具体的安装和使用方法这里不过多展开了,它还可以管理 scala、spark 等 java 相关的工具集。其中有一些也许将来我们也会用到。


项目初始化

我们使用 scala play的 sbt 项目模板,建立项目。理论上说,我们应该先在 seed8 项目模板中挑选一个最接近我们需要的,不过其实只要有基本的启动过程后,添加各种依赖库并不麻烦,所以我们简单的从最基本的 scala play项目开始,在一个空目录里,执行下面的 shell 命令:

$ sbt new playframework/play-scala-seed.g8
copying runtime jar...
[info] [launcher] getting org.scala-sbt sbt 1.5.5  (this may take some time)...
[info] [launcher] getting Scala 2.12.14 (for sbt)...
[info] welcome to sbt 1.5.5 (Oracle Corporation Java 16.0.2)
[info] loading settings for project global-plugins from gpg.sbt ...
[info] loading global plugins from /Users/mars/.sbt/1.0/plugins
[info] set current project to new (in build file:/private/var/folders/rk/tgh_zpzx233c40mb2cr5s7nw0000gp/T/sbt_58c369d9/new/)

This template generates a Play Scala project

name [play-scala-seed]: scripts-studio
organization [com.example]: liu.mars

Template applied in /Users/mars/jobs/script-studio/./scripts-studio


当然,这里不必要填一样的  organization 和项目名,只要读者自己能区分清楚,完全可以根据自己的喜好填写。
现在,如果我们在  scripts-studio 目录执行 

sbt run


就可以在浏览器中访问 http://localhost:9000/ 看到我们新建的项目了。
需要注意的是,使用 Java 16运行这个网站的话会报错,官方通报 scala play 2.8 只支持到 Java 11 ,而正在开发的 play 2.9 则支持到最高 java 17 。但是我目前测试 Java 15 可以正常运行。我打算尽可能用 15 运行这个项目,直到我真的遇到问题,需要倒退到 11,或者 2.9 发布,我就直接升级。
一般来说,Java 工程师对这个问题相当的宽容,目前还有很多项目运行在 java 8,我自己的 Jaskell 项目也维护着一个 java 8版本——最初我还维护了一个 java 6的版本,但是比起 java8,它写出来的代码太冗长了。但是其实 Java 11 是一个值得考虑的版本,在这个长期维护版本中,可以享受到 G1 垃圾回收算法带来的大幅性能改善,可以说比 CMS 有飞跃的进步。至于我们这个项目,本来就是教学,当然优先选择尽可能高的可用版本。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值