LoginSignup
27
18

More than 5 years have passed since last update.

RustのWebアプリ(Rocket)をHerokuにデプロイする

Last updated at Posted at 2018-03-11

Rustで書いたWebアプリをどこにデプロイしたらいいかわからなかったので色々調べたらそれっぽい記事があったので参考にしながら自分でもやってみたことをメモに残します。

RustのWebアプリケーションフレームワークは Rocket を使うものとします。

(前提)

  • Rustのnightlyがインストール済みである。
  • Heroku CLIをインストール済みで $ heroku login も済んでいる。

Rocketアプリを作るディレクトリではnightlyをデフォルトにする

このディレクトリ配下はstableではなくnightlyが標準で適用されます。

$ cd rust/rocket
$ rustup override set nightly

Rocketアプリを作る

$ cargo new hello-rocket --bin

HerokuのRust用buildpackを適用する

このbuildpackがビルドとデプロイをいい感じにやってくれます。

$ cd hello-rocket
$ heroku create --buildpack https://github.com/emk/heroku-buildpack-rust.git

RustConfigを作る

プロジェクトのルートにRustConfigというファイルを作ります。
buildpackが標準ではstableを使ってビルドするようになっているので、それを上書きする設定です。

RustConfig
VERSION=nightly

Cargo.tomlの依存関係にrocketとrocket_codegenを加える

Cargo.toml
(省略)

[dependencies]
rocket = "0.3.6"
rocket_codegen = "0.3.6"

Rocket.tomlを作る

よくわからないけど公式のドキュメントを参考にしてこんな感じにしました。

Rocket.toml
[development]
address = "localhost"
port = 5000
log = "normal"

[staging]
address = "0.0.0.0"
port = 80
log = "normal"

[production]
address = "0.0.0.0"
port = 80
log = "critical"

Procfileを作る

プロジェクトのルートにProcfileというファイルを作ります。
Herokuで使われる設定ファイル(?)です。

Procfile
web: ROCKET_PORT=$PORT ./target/release/hello-rocket

hello-rocketの部分は適宜変更します。

Herokuに環境変数を追加する

Heroku上でRocket.tomlproduction設定が使われるようにします。

$ heroku config:set ROCKET_ENV=production

環境構築これで終わり

お疲れ様でした。

main.rsを編集する

https://rocket.rs/guide/getting-started/ を参考にしてmain.rsを書き換えました。

src/main.rs
#![feature(plugin)]
#![plugin(rocket_codegen)]

extern crate rocket;

#[get("/")]
fn index() -> &'static str {
    "Hello, world!"
}

fn main() {
    rocket::ignite().mount("/", routes![index]).launch();
}

ローカルで動作確認

ローカルでRocketアプリを起動します。

$ cargo run

その後ブラウザでhttp://localhost:5000/を開いてHello, world!と表示されていればOKです。

Herokuにデプロイ

$ git add .
$ git commit -m "Initial commit"
$ git push heroku master

初回はちょっと時間がかかります。

Heroku上で動作確認

https://fierce-plateau-19045.herokuapp.com/ を開くとHello, world!と表示されることが確認できると思います。

以上です。


(ほとんどこの記事を参考にしました: http://www.duelinmarkers.com/2017/10/21/how-to-deploy-a-rocket-application-to-heroku.html )

27
18
0

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
  3. You can use dark theme
What you can do with signing up
27
18