В этом руководстве мы предполагаем, что вы следуете этому руководству, чтобы подготовить RPi для разработки на Swift.

Перед установкой Vapor Toolbox вам необходимо добавить некоторые зависимости

sudo apt-get install git libcurl3

затем выполните скрипт Vapor Toolbox

curl -sL toolbox.vapor.sh | bash

Обычно у вас должен быть такой журнал установки:

$ curl -sL toolbox.vapor.sh | bash
✅  Compatible
⬇️  Downloading...
Cloning into 'vapor-toolbox'...
remote: Counting objects: 2218, done.
remote: Total 2218 (delta 0), reused 0 (delta 0), pack-reused 2218
Receiving objects: 100% (2218/2218), 1.02 MiB | 310.00 KiB/s, done.
Resolving deltas: 100% (1243/1243), done.
Checking connectivity... done.
🛠  Compiling...
Cloning https://github.com/vapor/console.git
HEAD is now at 88e7b23 Merge pull request #27 from vapor/realtime-logs
Resolved version: 1.0.2
Cloning https://github.com/vapor/polymorphic.git
HEAD is now at 43ad0c4 Merge pull request #7 from bygri/bool-from-string
Resolved version: 1.0.1
Cloning https://github.com/vapor/core.git
HEAD is now at 9acd329 Merge pull request #29 from vapor/fix-decoding-failure
Resolved version: 1.1.1
Cloning https://github.com/vapor/json.git
HEAD is now at 44bd19b Merge pull request #25 from vapor/core-1.1
Resolved version: 1.0.6
Cloning https://github.com/vapor/node.git
HEAD is now at 4cf8c76 Merge pull request #21 from ZeroFactor/master
Resolved version: 1.0.1
Cloning https://github.com/vapor/path-indexable.git
HEAD is now at 0aa6f6e Merge pull request #7 from vapor/1.0
Resolved version: 1.0.0
Cloning https://github.com/DanToml/Jay.git
HEAD is now at 8331252 Merge pull request #53 from remko/master
Resolved version: 1.0.1
Compile Swift Module 'Polymorphic' (2 sources)
Compile Swift Module 'Jay' (21 sources)
Compile Swift Module 'PathIndexable' (2 sources)
Compile Swift Module 'libc' (1 sources)
Compile Swift Module 'Core' (28 sources)
Compile Swift Module 'Node' (22 sources)
Compile Swift Module 'Console' (34 sources)
Compile Swift Module 'JSON' (9 sources)
Compile Swift Module 'VaporToolbox' (19 sources)
Compile Swift Module 'Executable' (1 sources)
Linking ./.build/release/Executable
🚀  Installing...
Install failed, trying sudo
Vapor Toolbox v1.0.5-4-gd20c424 Installed
Use vapor --help and vapor <command> --help to learn more.

Не бойтесь увидеть Ошибка установки, попытка sudo, потому что мы не устанавливаем Vapor на системный уровень, а только на уровне пользователя (как мы делали со Swift раньше).

Теперь мы сгенерируем проект Hello с помощью Vapor.

vapor new Hello

Он создаст папку с именем Hello и будет содержать некоторые файлы только что созданного проекта Vapor.

Затем используйте команду vapor build в интерфейсе командной строки Vapor для получения зависимостей, затем выполните vapor run serve, чтобы запустить ее локально (по умолчанию в режиме разработки)

$ vapor run serve
Running Hello...
No preparations.
Server 'default' starting at 0.0.0.0:8080

Теперь перейдите к своему RPi с IP-адресом и портом 8080, и вы должны увидеть «Он работает».

Взгляните на папку, созданную автоматически с помощью инструментария Vapor.

(Не удивляйтесь, увидев на моем снимке экрана macOS Finder или Xcode, я использую SSHFS со своего Mac для удаленной разработки на моем RPi. Если руководство, объясняющее этот интерес ты, подскажи, я с тобой поделюсь)

У нас много папок, на этот раз мы не будем покрывать всю эту папку, но взглянем на три из них:

  • Источники

Он содержит весь эффективный источник вашего проекта. Это подходящее место для вашего файла Swift. Вы найдете main.swift файл, который предназначен для запуска вашего парового сервера. Здесь были автоматически созданы две подпапки: Контроллеры и Модели. В этих папках также содержится автоматически сгенерированный быстрый код для модели данных, похожей на пост. Не заботьтесь об этом, мы выбросим позже.

  • Общественные

Эта папка содержит данные, которые будут доступны как есть. В эту папку должны быть помещены клиентский JavaScript, файл CSS и различные типы носителей.

  • Пакеты

Эта специальная папка была похожа на Carthage- или Pods- на SwiftPM (аббревиатура от S wift P ackage M anager). Он содержит разрешенные зависимости файла Package.swift, которые соответствуют Cartfile или Podfile этому другому диспетчеру зависимостей.

Прямо сейчас загляните в main.swift файл

import Vapor
let drop = Droplet()
drop.get { req in
    return try drop.view.make("welcome", [
     "message": drop.localization[req.lang, "welcome", "title"]
    ])
}
drop.resource("posts", PostController())
drop.run()
  1. Во-первых, мы импортируем Vapor пакет, классический.
  2. Затем мы создаем Droplet. Это контейнер службы, который позволяет создавать веб-сервер / API, позволяющий управлять маршрутизацией, промежуточным программным обеспечением и т. Д.
  3. В третьей части мы создаем маршрут приветствия на главную страницу. drop.get означает «входящий запрос с методом GET HTTP для маршрутизации /». Замыкание после - это обработчик запроса. В этом случае он использует свойство view нашей капли для рендеринга страницы welcome HTML Leaf, объединенной с коллективом.
  4. Следующая часть указывает нашей капле, что у нас есть CRUD ресурс с именем posts. В этой статье мы не будем углубляться в логику контроллера / модели, но для простоты она позволит вам создать простой API на основе CRUD операции для данных, хранящихся в базе данных.
  5. Последняя последовательность этого кода просто говорит запустить нашу каплю.

Как видите, запустить небольшую веб-страницу очень просто. Мы продолжим позже. В следующий раз мы попробуем использовать шаблон Leaf для улучшения домашней страницы и создания формы входа.