Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

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

きっかけ

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へのデプロイ、テスト実行環境のセットアップ)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?