LoginSignup
7
3

More than 3 years have passed since last update.

HANAMI を Heroku にデプロイしてみた

Last updated at Posted at 2018-08-29

きっかけ

RubyKaigi 2018 で存在を知った HANAMI。興味があったので触ってみたかったというのがきっかけ。

最初の環境構築

  • OS:Debian 9.5 (VirtualBox)
  • Ruby: 2.5.1
  • hanami: 1.2.0
  • DB: MySQL 5.7.23

Ruby は rbenv でインストール。hanami はガイドに従ってインストール。なお、MySQL にするのでプロジェクトの作成は

$ rbenv exec hanami new bookshelf --database=mysql

とした。これで良さげ。

MySQL のインストールはこちらを参考にさせてもらった。

最初の難関

hanami のデフォルトのポートは 2300 番なのだが、ホスト OS のファイアーウォールは無効にし VirtualBox のネットワークを「NAT + ポートフォワード」もしくは「ホストオンリーアダプター」で試したが一向につながってくれない。SSH で接続はできるのだが、はてさて困った。

※解決方法をご存知の方、ご一報ください。

そうだ、デプロイしよう!

目的は hanami を動かしたいだけである。でも、自前の Macbook にはインストールしたくない。そんなワガママなことを考えていたので、てっとり早くどこかにデプロイしてみようと思った次第である。

デプロイ先はこのご時世なのでいっぱいあるのだが、何となく「無料で Ruby が使えそうなところ」を考えたら Heroku が思いついた。特にこだわりもないので Heroku にデプロイしてみる。

Heroku CLI

Heroku にデプロイするには Heroku CLI というものが必要らしいが、snap を用いたインストールをやっても一向にインストールされた気配がない。 which しても whereis しても見つからない。さっさと諦めて curl を用いてインストール。すぐ出来た。

やってみる

$ rbenv exec hanami new sample-bookshelf --database=mysql
$ cd sample-bookshelf
$ rbenv exec bundle install --path=vendor/bundle
$ git add .
$ git commit -m "first commit"
$ heroku login
$ heroku apps:create sample-bookshelf
$ git push heroku master

これだけでデプロイ出来たみたいなので動作確認。

第二の難関

ブラウザで確認すると上手く表示されていない。 $ heroku logs --tail で確認しろ、というメッセージが出ているので素直に従う。

(中略)
bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.4.0/bin/rackup)
KeyError: key not found: "SMTP_HOST"
/app/config/environment.rb:46:in `fetch'
(中略)

こんな感じのエラーメッセージが出ていた。該当箇所を確認すると production 環境での mailer の設定のようである。 ENV に適当な値を設定してもいいが、まだ mailer に用事はないのでエラー該当箇所をコメントアウトして回避することにした。
commit/push をしてから再デプロイする。

第三の難関

再確認するとまだダメである。またも $ heroku logs --tail で確認する。

(中略)
bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.4.0/bin/rackup)
KeyError: key not found: "DATABASE_URL"
/app/config/environment.rb:21:in `fetch'
(中略)

先述の SMTP_HOST 同様、 ENV に未定義であるために出ているエラーのようである。ここは直前にコメントがあるので分かりやすかった。

model do
  ##
  # Database adapter
  #
  # Available options:
  #
  #  * SQL adapter
  #    adapter :sql, 'sqlite://db/sample_bookshelf_development.sqlite3'
  #    adapter :sql, 'postgresql://localhost/sample_bookshelf_development'
  #    adapter :sql, 'mysql://localhost/sample_bookshelf_development'
  #
  adapter :sql, ENV.fetch('DATABASE_URL')

  ##
  # Migrations
  #
  migrations 'db/migrations'
  schema     'db/schema.sql'
end

adapter :sql, ENV.fetch('DATABASE_URL')adapter :sql, 'mysql://localhost/sample_bookshelf_development' に変更し、commit/push してから再度デプロイする。

第四の難関

再々確認すると、まだダメらしい…。 $ heroku logs --tail で確認する。

(中略)
bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.4.0/bin/rackup)
Hanami::Model::Error: LoadError: cannot load such file -- mysql
(中略)

一番頭を抱えたエラーだった。

  • config/environment.rb を変更した
  • gem はインストールされている

「何がなんだか…」と思っていたところで、インストールしている gem は mysql ではなく mysql2 だと気付いた。分かればなんてことはないが、これに気付くのにえらい時間がかかった。
よって、adapter の設定は mysql2://localhost/sample_bookshelf_development' が正しい設定である。commit/push して再度デプロイする。

時は来た

sample-bookshelf

なんかそれっぽいもの出たので満足。

参考

[WIP] Hanamiの環境構築(Herokuへのデプロイ、テスト実行環境のセットアップ)

7
3
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
7
3