6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Hanamiを本番に載せたらdotenvを読まなくって困った話

Last updated at Posted at 2018-04-01

はじめに

Hanamiの設計は良いですね。
Hanamiを使うことで、RubyでDDD(ドメイン駆動設計)を実践できるようになった感があります。

はじめてHanamiを使って本番環境構築をした時に環境変数周りで詰まったので、後続の方のためにここにメモを残します。

バージョン情報

cat .ruby-version
# 2.5.1
cat Gemfile.lock | grep hanami\ 
#   hanami (1.1.1)
# hanami (~> 1.1)

TL;DR

  • HANAMI_ENV=productionだと、dotenvファイルを読み込まない件
    • /etc/environmentなり、環境変数に諸々入れておいてください

何が起きたか

Hanamiをnewするとわかるのですが、development環境、test環境ではdotenvというgemを使って環境変数を管理しているのです。

見てみましょう。

mkdir tmp && cd tmp
rbenv local 2.5.1
bundle init
echo "gem 'hanami'" >> Gemfile
bundle install
bundle exec hanami new my_first_hanami -d mysql2 --application-name=web --test=rspec --template=slim

#      create  .hanamirc
#      create  .env.development
#      create  .env.test
#      create  README.md
# ~~~~~~~~~~~~~~~~(略)~~~~~~~~~~~~~~~~~~~~~~
#      append  .env.development
#      append  .env.test

cat .env.development

# # Define ENV variables for development environment
# DATABASE_URL="mysql2://localhost/my_first_hanami_development"
# SERVE_STATIC_ASSETS="true"
# WEB_SESSIONS_SECRET="f76e2a0ea820350436c3fe95fdd1b4999969fbad993fe112baae4e480d784839"

.env.development.env.testというファイルが作られ、DATABASE_URLなどの変数が定義されているのがわかるかと思います。

起動してアクセスしてみましょう。

bundle exec hanami s
curl http://localhost:2300 -D - -s  -o /dev/null # Responseヘッダーのみを取得する

# HTTP/1.1 200 OK
# Content-Length: 14911
# Server: WEBrick/1.4.2 (Ruby/2.5.1/2018-03-29)
# Date: Sat, 31 Mar 2018 14:06:04 GMT
# Connection: Keep-Alive

無事、200 OKが返ってきていることがわかるかと思います。

では、この調子で本番で動かすとどうなるでしょうか。HANAMI_ENV=productionで動かしてみます。

HANAMI_ENV=production bundle exec hanami s
curl http://localhost:2300 -D - -s  -o /dev/null

# HTTP/1.1 500 Internal Server Error
# Content-Type: text/html;charset=utf-8
# Server: WEBrick/1.4.2 (Ruby/2.5.1/2018-03-29)
# Date: Sun, 01 Apr 2018 03:30:37 GMT
# Content-Length: 7453
# Connection: Keep-Alive

500 Internal Server Errorが返ってきました。どういうことでしょうか。

スクリーンショット 2018-04-01 12.32.48.png
Boot Error
Something went wrong while loading /Users/shinse/go/src/github.com/mrdShinse/my_first_hanami/config.ru

Hanami::Model::Error: LoadError: cannot load such file -- sequel/adapters/

起動時のエラーで、Hanami::Modelあたりでsequel/adapters/というファイルがない??なんのこっちゃ?

これ、実はproductionで動かすことで環境変数DATABASE_URLが空になり、DB接続するsequelというgemが吐いたエラーをHanami::Modelがキャッチしているのですが...

メッセージが判りづらい笑

これは結構ハマりましたw

Hanamiはdotenvを使ってるので.envとか.env.localとか.env.productionとか試したのですが、僕が使っているバージョンのHanamiはproductionの場合に.envを読んでいなかったのもハマりポイントでした。

DATABASE_URLさえ渡してあげれば解決するので、

HANAMI_ENV=production DATABASE_URL="mysql2://localhost/my_first_hanami_production" bundle exec hanami s

とかでも解決するのですが、後々capistranoでdeployする場合にbundler経由で環境変数を渡す方法が面倒だったこともあり、僕は/etc/environmentに環境変数を定義することにしました :thumbsup:

こちらからは以上です!

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?