LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Vapor ProjectをHerokuにDeployする

Vapor Advent Calendar 2020に参加してみようと思ったのと、備忘録も兼ねて書いてみました。

まず新しいプロジェクトを作ります。
ターミナルで任意のディレクトリに移動し

console
$ vapor new [project name]

と、コマンドを入れます。[project name]の所は適宜変えてください。

console
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を以下のコマンドで追加しておきます。

console
$ swift test --generate-linuxmain

Xcodeを起動

Resources/viewsの中にあるindex.leafを読み込むための設定をします。
Xcodeを起動したらまず左上のプロジェクト名の所をクリックしてEdit Schemeを選択します。

pic1.png

この画面でWorking Directryの設定が出来るのでVaporプロジェクトの場所に合わせてください。

pic2.png

つぎは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にPushする

herokuにpushする前にherokuアカウントを作っておきます。

ターミナルでheloku CLIを使うので

console
$ brew tap heroku/brew && brew install heroku

次にローカルリポジトリを作成します。

console
$ git init 
$ git add . 
$ git commit -m "initial commit" 

これでherokuにpushする準備が整ったのでloginして

console
$ heroku login

新しいherokuのアプリケーションを作ります。

console
$ vapor heroku init 

リージョンはUS、deploy methodはbuildpack、swift verは任意で(自分の環境は5.3でした)

後の質問は全部yと答えるとデプロイが始まります。(10分前後かかります。)

console
Verifying deploy... done.

と、表示されれば成功です。ただし

console
$ vapor heroku init

で作ったherokuアプリケーションはランダム生成された名前が適用されるので

console
$ heroku rename [name]

で名前を変更出来ます。

Heroku上でマイグレート

herokuの管理画面上でデータベースの設定をします。

Heroku Postgresを選択

20201120-ss1.png

DatabaseCredentialsの情報を元にをherokuの管理画面に環境変数を登録していきます。

スクリーンショット 2020-12-19 12.34.53.png

Settings -> Config Varsに

DATABASE_HOST
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME

の4つの環境変数を追加します。

20201120-ss3.png

追加したら右上のメニューからRun consolを選択

20201120-ss4.png

heroku_console
$ Run migrate

成功するとデータベースが使えるようになります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0