環境
- Ruby 2.7.4
- Hanami 1.3.4
- MySQL 8.0.23
- Heroku CLI 7.56.1
ローカル環境構築
まず、HanamiはRuby3では使えないらしい。
Cannot create new hanami application · Issue #1108 · hanami/hanami
Boot Error
Something went wrong while loading /Users/k_end/personal/groovy_grouping/config.ru
Hanami::Model::Error: PG::ConnectionBad: could not connect to server: Connection refused Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?
というわけで、Rubyのバージョンを2.7.4(現時点の2.xx最新版)にして、hanami newし直す。DBは使い慣れたMySQLにした。
|
|
HanamiはRailsと違って、create app時点ではcommitされていない。
Herokuデプロイ
参考:HANAMI を Heroku にデプロイしてみた - Qiita
特にRailsのときと変わらず、Heroku CLIを使う。
|
|
The Heroku CLI | Heroku Dev Center
Railsと比べると、デプロイにかかる時間が圧倒的に短い。
デプロイでは特に問題は起きないが、アクセスするとApplication Errorになっている。
2021-07-20T13:29:24.949581+00:00 app[web.1]: bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.7.0/bin/rackup)
2021-07-20T13:29:24.950785+00:00 app[web.1]: /app/config/environment.rb:46:in `fetch': key not found: "SMTP_HOST" (KeyError)
2021-07-20T13:29:24.950813+00:00 app[web.1]: from /app/config/environment.rb:46:in `block (3 levels) in <top (required)>'
メイラーは使用しないのでコメントアウトする。もし必要なら、AmazonSESやSendGridを使用するので、そのホストを設定すればよさそう。
2021-07-20T13:39:53.866545+00:00 app[web.1]: bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.7.0/bin/rackup)
2021-07-20T13:39:53.867822+00:00 app[web.1]: /app/config/environment.rb:21:in `fetch': key not found: "DATABASE_URL" (KeyError)
2021-07-20T13:39:53.867862+00:00 app[web.1]: from /app/config/environment.rb:21:in `block (2 levels) in <top (required)>'
参考記事ではここでローカルホストを使っているが、本番ではMySQLに接続したいのでDBを用意することにする。
Hashlogの移行時と同様にJawsDBを使用する。
heroku addons:create jawsdb
下記コマンドでJawsDRのURLを取得できる。
JawsDB MySQL | Heroku Dev Center
heroku config:get JAWSDB_URL
mysql://ユーザーネーム:パスワード@なんちゃらかんちゃら.us-east-1.rds.amazonaws.com:3306/データベース名
そして、Herokuの環境変数にDB URLを入れる。
このとき、"mysql://..."
ではなく、"mysql2://..."
にする。そういえば、Railsのときもそうでしたね。
heroku config:set DATABASE_URL="mysql2://ユーザーネーム:パスワード@なんちゃらかんちゃら.us-east-1.rds.amazonaws.com:3306/データベース名"
以上の手順でデプロイができた。