vapor new hello-jumpper -n
cd 'hello-jumpper'
// swift-tools-version:5.2
import PackageDescription
let package = Package(
name: "hello-jumpper",
platforms: [
.macOS(.v10_15)
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
.package(url: "https://github.com/jumpper/jumpper.git", from: "0.0.5"),
.package(url: "https://github.com/vapor/leaf.git", from: "4.0.0-rc.1.4")
],
targets: [
.target(
name: "App",
dependencies: [
.product(name: "Vapor", package: "vapor"),
.product(name: "Leaf", package: "leaf"),
.product(name: "jumpper", package: "jumpper")
],
swiftSettings: [
.unsafeFlags(["-cross-module-optimization"], .when(configuration: .release))
]
),
.target(name: "Run", dependencies: [.target(name: "App")]),
.testTarget(name: "AppTests", dependencies: [
.target(name: "App"),
.product(name: "XCTVapor", package: "vapor"),
])
]
)
Agora você pode abrir o Package.swift com o Xcode (caso não tenha editado o arquivo com ele).
Aguarde até que o Xcode faça o download das dependências no projeto.
import XCTest
#if os(Linux) || os(FreeBSD)
@testable import AsyncHTTPClientTests
XCTMain([
testCase(AppTests.testHelloWorld)
])
#endif
app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
// Configure Leaf
app.views.use(.leaf)
app.leaf.cache.isEnabled = app.environment.isRelease
/*...*/
import Leaf
import jumpper
Vamos editar a func routes e deixar ela assim:
func routes(_ app: Application) throws {
app.get { req in
return req.view.render("index", [
"title": ":: Hello jumpper",
"body": H1("Hello jumpper").getString()
])
}
}
Pronto =D basta rodar seu projeto e abrir seu navegador. Ao final você deve ter uma página igual a essa:
Como não configuramos o custom working directory e nem criamos um Xcode project.
Caso você tenha algum problema como este ao rodar seu projeto via Xcode, faça uso da seguinte linha via terminal diretamente na pasta do seu projeto.
{"error":true,"reason":"LeafError(file: \"\/Users\/michel\/Library\/Developer\/Xcode\/DerivedData\/hello-jumpper-djoytftxxnsisrcssinrjjasjovd\/SourcePackages\/checkouts\/leaf-kit\/Sources\/LeafKit\/LeafSource\/LeafSources.swift\", function: \"searchSources(t:on:s:)\", line: 73, column: 69, reason: LeafKit.LeafError.Reason.noTemplateExists(\"index\"))"}
sudo vapor run serve --hostname 0.0.0.0 --port 80
Vamos criar um novo repositório no GitHub para controlar nossas modificações.
Acesse: https://github.com/new e crie um novo repositório. (Sim pode ser privado). Siga as orientações do GitHub e faça seu primeiro commit e push para main.
Observação: quando você cria um projeto com vapor ele já adiciona o arquivo de .gitignore e também inicia o git no projeto, portanto, basta adicionar o remote origin no seu git local apresentado na parte …or push an existing repository from the command line
Neste ponto você já pode fazer seu primeiro commit e push para a branch main.
heroku login
Quando aparecer a pergunta:
heroku: Press any key to open up the browser to login or q to exit:
Se tudo ocorreu bem você receberá a seguinte tela no navegador:
Logging in... done
Logged in as myemail@mydomain.com
Agora vamos criar projeto no heroku
heroku create hellojumpper
Você receberá uma saída similar a essa:
heroku create hellojumpper
Creating ⬢ hellojumpper... done
https://hellojumpper.herokuapp.com/ | https://git.heroku.com/hellojumpper.git
Conectar repositório com heroku
heroku git:remote -a hellojumpper
Saída:
set git remote heroku to https://git.heroku.com/hellojumpper.git
heroku buildpacks:set vapor/vapor
Saída:
Buildpack set. Next release on hellojumpper will use vapor/vapor.
Run git push heroku main to create a new release using this buildpack.
Para finalizar precisamos adicionar um arquivo de processos no projeto para que o após o deploy o serviço já inicie:
Crie um arquivo vim Procfile
web: Run serve --env production --hostname 0.0.0.0 --port $PORT
git add Procfile
git commit -m "Adicionando Procfile"
git push origin main
git push heroku main
Seu deploy começa a rodar:
O processo demora alguns minutos dependendo do tamanho do seu projeto. Aguarde o processo finalizar.
Quando você receber esta saída no seu terminal o processo de deploy foi concluído.
remote: [873/873] Linking Run
remote: -----> Installing dynamic libraries
remote: -----> Installing binaries
remote: -----> Cleaning up after build
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 44.8M
remote: -----> Launching...
remote: Released v10
remote: https://hellojumpper.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/hellojumpper.git
8a45ab6..0d269b8 main -> main
E pronto seu projeto está no ar no link criado no meu caso: https://hellojumpper.herokuapp.com/
No próximo post vamos continuar e construir uma simples rota que retorna a lista de bancos do brasil.
Espero que seja de valor este post para seu trabalho.
Até a próxima!