Swift Perfect Mac本地环境配置

Perfect框架中文文档地址: http://perfect.org/docs/index_zh_CN.html

开启本地服务器

首先, 根据Perfect框架的官网文档, 快速开启本地服务器 http://perfect.org/docs/gettingStarted_zh_CN.html

数据库选择

后端开发, 必不可少的便是数据库, Perfect框架支持好几种数据库, 我自己选用的是MySql数据库, 以下所有教程都是基于MySql数据库进行展开的.

教程所有内容主要是以在本地和服务器部署各种环境为主, 避免浪费不必要的时间在部署环境上.

在Mac上安装MySql

打开终端, 安装mysql(请勿使用dmg的方式安装mysql, 经我测试, 发现会碰到一些麻烦的问题)

1
brew install mysql
  • 在Mac OS 10.12 上面, 直接安装即可.
  • 在Mac OS 10.13 上面, 可能需要更新Homebrew, 更新Homebrew又需要Ruby, 更新Ruby又需要Rvm等等. 在这个版本的操作系统上面, Homebrew拿不到/usr/local文件夹的读写权限, 按照官方给出的解决方法(https://github.com/Homebrew/brew/issues/3228), 在我自己的mac电脑上并不行, 来回折腾了1个多小时还是不行, 我决定采取暴力方法.直接卸载重装Homebrew, 重新安装后, 顺利的在mac上安装好了mysql.

如果你也需要采用这种暴力方法, 请继续看, 如果你已经顺利安装了, 直接跳过卸载重装的部分.

卸载Homebrew

1
2
3
4
$ cd `brew --prefix`
$ rm -rf Cellar$ brew prune
$ rm -rf Library .git .gitignore bin/brew README.md share/man/man1/brew
$ rm -rf ~/Library/Caches/Homebrew

重新安装Homebrew

进入Homebrew官网 https://brew.sh/index_zh-cn.html, 复制这里的命令到终端安装即可(安装命令可能会变, 所以请自行前往复制)

MySql启动与配置

安装完成后, 手动启动mysql

1
2
3
mysql.server start # 启动
mysql.server stop # 停止
mysql.server restart # 重启

打开数据库

1
mysql -u root -p

设置mysql密码

1
UPDATE user SET authentication_string=PASSWORD('newpassword') where USER='root';

更新用户名和密码, 用户名建议用root, 后面的教程都会以此为例子.

设置完密码后刷新权限

1
FLUSH PRIVILEGES

输入 \q 退出数据库

重新登录数据库, 尝试用新密码进入, 如果成功, 退出数据库, 进行接下来的步骤.

建议在网上找一个数据库软件, 更加直观的查看数据和调试.

代码连接数据库

接下来回到本地服务器项目代码这边.

打开Package.swift导入.Package(url:"https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 3), 注意最后面有个逗号.

在终端执行swift buildswift package generate-xcodeproj, 用xcode打开项目.打开main.swift

1
2
3
4
5
6
7
import PerfectMySQL // 导入
// 配置数据库信息
let testHost = "127.0.0.1"
let testUser = "root"
let testPassword = "数据库密码"
let testDB = "mysql"

除了密码需要改成你自己设置的密码, 其他的照搬

加入以下函数并调用, 在这个函数声明之后, 随处调用即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func fetchData() {
let mysql = MySQL() // 创建一个MySQL连接实例
let connected = mysql.connect(host: testHost, user: testUser, password: testPassword)
guard connected else {
// 验证一下连接是否成功
print(mysql.errorMessage())
return
}
print("\(mysql.listDatabases())")
defer {
mysql.close() //这个延后操作能够保证在程序结束时无论什么结果都会自动关闭数据库连接
}
}

运行项目, 控制台打印

["information_schema", "mysql", "performance_schema", "sys"]

表示数据库已经用代码连接成功.