Vapor Project를 Heroku에 배포

8935 단어 경 6SwiftVapor

Vapor Advent Calendar 2020에 참가해 보려고 생각했던 것과 비망록도 겸해 써 보았습니다.



먼저 새로운 프로젝트를 만듭니다.
터미널에서 원하는 디렉토리로 이동

콘솔
$ vapor new [project name]

그리고 명령을 넣습니다. [project name] 의 곳은 적절히 바꾸어 주십시오.

콘솔
Would you like to use Fluent? (--fluent) 
Which database would you like to use? (--fluent.db)
Would you like to use Leaf? (--leaf)

이번에는 Fluent를 사용하여 DB를 마이그레이션하기 때문에
터미널에서 질문에 y라고 대답하십시오.
DB는 Postgress를 사용합니다.

그런 다음 LinuxMain.swift를 다음 명령으로 추가합니다.

콘솔
$ swift test --generate-linuxmain

Xcode 시작



Resources/views 안에 있는 index.leaf를 로드하기 위한 설정을 합니다.
Xcode를 시작하면 먼저 왼쪽 상단의 프로젝트 이름을 클릭하고 Edit Scheme을 선택합니다.



이 화면에서 Working Directry를 설정할 수 있으므로 Vapor 프로젝트의 위치에 맞추십시오.



다음은 configure.swift에 마이그레이션을 수행하는 코드를 추가합니다.

configure.swift
app.migrations.add(SessionRecord.migration) 
app.sessions.use(.fluent(.psql))

다음은 routes.swift를 다음과 같이 만듭니다.

routes.swift
import Fluent
import Vapor

// MARK: - Date extention

extension Date {
    func currentTime() -> String {
        let formatter = DateFormatter()
        formatter.timeZone = .current
        formatter.locale = .current
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return formatter.string(from: self)
    }
}

func routes(_ app: Application) throws {

    app.middleware.use(app.sessions.middleware)

    app.get() { req -> EventLoopFuture<View> in
        // cookieに最終訪問時刻を記録
        req.session.data["last_visited_at"] = Date().currentTime()
        return req.view.render("index", ["title": "Hello Vapor!"])
    }

    app.get("hello") { req -> String in
        return "Hello, world!"
    }

    try app.register(collection: TodoController())

}

이것으로 Migrate 후, Web 사이트에 방문한 사람에게 SessionID를 부여해, DB상에서 확인할 수 있게 됩니다.

Heroku로 푸시하기



heroku에 push하기 전에 heroku 계정를 만들어 둡니다.

터미널에서 heloku CLI를 사용하기 때문에

콘솔
$ brew tap heroku/brew && brew install heroku

그런 다음 로컬 리포지토리를 만듭니다.

콘솔
$ git init 
$ git add . 
$ git commit -m "initial commit" 

이제 heroku에 push 할 준비가되었으므로 login하고

콘솔
$ heroku login

새로운 heroku 응용 프로그램을 만듭니다.

콘솔
$ vapor heroku init 

리전은 US, deploy method는 buildpack, swift ver는 임의로 (자신의 환경은 5.3이었습니다)

나중의 질문은 모두 y라고 대답하면 배포가 시작됩니다. (10분 전후 걸립니다.)

콘솔
Verifying deploy... done.

그리고 표시되면 성공입니다. 그러나

console
$ vapor heroku init

에서 만든 heroku 어플리케이션은 랜덤 생성된 이름이 적용되므로

console
$ heroku rename [name]

로 이름을 바꿀 수 있습니다.

Heroku에서 마이그레이트



heroku의 관리 화면에서 데이터베이스를 설정합니다.

Heroku Postgres 선택



DatabaseCredentials 정보를 바탕으로 heroku의 관리 화면에 환경 변수를 등록합니다.



Settings -> Config Vars
DATABASE_HOST
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME

네 가지 환경 변수를 추가합니다.



추가한 후 오른쪽 상단 메뉴에서 Run consol을 선택



heroku_console
$ Run migrate

성공하면 데이터베이스를 사용할 수 있습니다.

좋은 웹페이지 즐겨찾기