diff --git a/.gitignore b/.gitignore
index cfe11a4..f66e525 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
## Build generated
build/
DerivedData
+Package.resolved
## Various settings
*.pbxuser
@@ -67,3 +68,5 @@ PerfectTemplate.xcodeproj
Tests/
webroot/
Package.pins
+
+.DS_Store
diff --git a/Package.swift b/Package.swift
index c2604d5..60f9105 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,10 +1,21 @@
-// Generated automatically by Perfect Assistant Application
-// Date: 2017-09-20 19:30:47 +0000
+// swift-tools-version:4.0
+// The swift-tools-version declares the minimum version of Swift required to build this package.
+
import PackageDescription
+
let package = Package(
- name: "PerfectTemplate",
- targets: [],
- dependencies: [
- .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 3),
- ]
+ name: "PerfectTemplate",
+ dependencies: [
+ // Dependencies declare other packages that this package depends on.
+ .package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", from: "3.0.3"),
+ ],
+ targets: [
+ // Targets are the basic building blocks of a package. A target can define a module or a test suite.
+ // Targets can depend on other targets in this package, and on products in packages which this package depends on.
+ .target(
+ name: "PerfectTemplate",
+ dependencies: ["PerfectHTTPServer"],
+ path: "Sources"),
+ ]
)
+
diff --git a/README.md b/README.md
index 5878a8a..5d21bad 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# PerfectTemplate [简体中文](README.zh_CN.md)
+# PerfectTemplate [简体中文](README.zh_CN.md) [Русский](README.ru_RU.md)
@@ -54,8 +54,7 @@ The following will clone and build an empty starter project and launch the serve
```
git clone https://github.com/PerfectlySoft/PerfectTemplate.git
cd PerfectTemplate
-swift build
-.build/debug/PerfectTemplate
+swift run
```
You should see the following output:
diff --git a/README.ru_RU.md b/README.ru_RU.md
new file mode 100644
index 0000000..e86c8cf
--- /dev/null
+++ b/README.ru_RU.md
@@ -0,0 +1,142 @@
+# PerfectTemplate [English](https://github.com/PerfectlySoft/PerfectTemplate) [简体中文](README.zh_CN.md)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Чистый начальный проект Perfect
+
+Данный репозиторий содержит чистый проект Perfect, который можно клонировать и использовать при начале новой работы. Он собирается с помощью Swift Package Manager и запускает автономный HTTP.
+
+## Совместимость со Swift
+
+Ветка master этого проекта компилируется в **Xcode 9.1** и в **Swift 4.0.2** на Ubuntu.
+
+## Сборка и Запуск
+
+Клонирование и сборка чистого начального проекта, а также запуск сервера на порте 8080 и 8181.
+
+```
+git clone https://github.com/PerfectlySoft/PerfectTemplate.git
+cd PerfectTemplate
+swift run
+```
+
+После этого должно вывестись:
+
+```
+[INFO] Starting HTTP server localhost on 0.0.0.0:8181
+```
+
+Это значит, что сервер запущен и ожидает соединений. Перейдите на [http://localhost:8181/](http://127.0.0.1:8181/), чтобы увидеть приветствие. Нажмите control-c для остановки сервера.
+
+## Начальное содержание
+
+Файл примера содержит простой обработчик запросов "hello, world!" и показывает, как хранить статические файлы, сжимать исходящий контент и запускать сверх одного сервера за раз.
+
+```swift
+import PerfectLib
+import PerfectHTTP
+import PerfectHTTPServer
+
+// Пример обработчика запроса.
+// Функция 'handler' будет указана непосредственно в конфигурации ниже.
+func handler(data: [String:Any]) throws -> RequestHandler {
+ return {
+ request, response in
+ // Ответ простым сообщением.
+ response.setHeader(.contentType, value: "text/html")
+ response.appendBody(string: "Hello, world!Hello, world!")
+ // Убедитесь, что вызывается response.completed() в конце функции обработчика.
+ response.completed()
+ }
+}
+
+// Конфигурация сервера-примера.
+// Данный пример конфигурации показывает, как запускать сервер
+// используя dictionary с ней.
+
+
+let confData = [
+ "servers": [
+ // Конфигурация для одного сервера, который:
+ // * Хранит сообщение hello world на :/
+ // * Хранит статические файлы в директории "./webroot"
+ // (которая должна быть размещена в данной рабочей директории).
+ // * По необходимости сжимает исходящие данные.
+ [
+ "name":"localhost",
+ "port":8181,
+ "routes":[
+ ["method":"get", "uri":"/", "handler":handler],
+ ["method":"get", "uri":"/**", "handler":PerfectHTTPServer.HTTPHandler.staticFiles,
+ "documentRoot":"./webroot",
+ "allowResponseFilters":true]
+ ],
+ "filters":[
+ [
+ "type":"response",
+ "priority":"high",
+ "name":PerfectHTTPServer.HTTPFilter.contentCompression,
+ ]
+ ]
+ ]
+ ]
+]
+
+do {
+ // Запуск серверов на основе конфигурации.
+ try HTTPServer.launch(configurationData: confData)
+} catch {
+ fatalError("\(error)") // fatal error при запуске одного из серверов
+}
+```
+
+
+## Проблемы
+
+Мы переходим к использованию JIRA для всех багов и решения проблем, поэтому GitHub Issues отключены.
+
+Если вы нашли ошибку, баг, или у вас есть любое другое полезное предложение по документации, пожалуйста, перейдите на [http://jira.perfect.org:8080/servicedesk/customer/portal/1](http://jira.perfect.org:8080/servicedesk/customer/portal/1) и напишите об этом.
+
+Весь список известных проблем находится на [http://jira.perfect.org:8080/projects/ISS/issues](http://jira.perfect.org:8080/projects/ISS/issues)
+
+
+
+## Дальнейшая информация
+Для большей информации о проекте Perfect, пожалуйста, посетите [perfect.org](http://perfect.org).
diff --git a/README.zh_CN.md b/README.zh_CN.md
index a87a930..ea2980c 100644
--- a/README.zh_CN.md
+++ b/README.zh_CN.md
@@ -1,4 +1,4 @@
-# PerfectTemplate [English](https://github.com/PerfectlySoft/PerfectTemplate)
+# PerfectTemplate [English](https://github.com/PerfectlySoft/PerfectTemplate) [Русский](README.ru_RU.md)
@@ -45,7 +45,7 @@ Perfect Web服务器项目模板
###Swift兼容性
-本项目目前使用Swift 4.0工具链(Ubuntu)或Xcode 9编译。
+本项目目前使用Swift 4.0.2工具链(Ubuntu)或Xcode 9.1编译。
## 编译运行
@@ -54,8 +54,7 @@ Perfect Web服务器项目模板
```
git clone https://github.com/PerfectlySoft/PerfectTemplate.git
cd PerfectTemplate
-swift build
-.build/debug/PerfectTemplate
+swift run
```
如果没有问题,输出应该看起来像是这样: