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にマイグレートを行うためのコードを追加します。
app.migrations.add(SessionRecord.migration)
app.sessions.use(.fluent(.psql))
次は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を使うので
$ 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.
と、表示されれば成功です。ただし
$ vapor heroku init
で作ったherokuアプリケーションはランダム生成された名前が適用されるので
$ heroku rename [name]
で名前を変更出来ます。
Heroku上でマイグレート
herokuの管理画面上でデータベースの設定をします。
Heroku Postgresを選択
DatabaseCredentialsの情報を元にをherokuの管理画面に環境変数を登録していきます。
Settings -> Config Varsに
DATABASE_HOST
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
の4つの環境変数を追加します。
追加したら右上のメニューからRun consolを選択
$ Run migrate
成功するとデータベースが使えるようになります。