heroku初めて使ったけど謎のハマりさえ無ければ便利だな
— はぜ (@haze_it_ac) 2019年2月2日
趣味で勉強がてら適当に作るRails Applicationのデプロイ先、色々考えてみたけど結局今のところherokuが一番だよねーっていう結論になってしまった。
東京リージョンに結構な金が掛かるからherokuを触るのは避けていて、ようやくリージョンを諦めて 今回初めてデプロイしたんだけど思ったより詰まったのでメモがてら軽くまとめておく。
ローカル環境のバージョンは、それぞれ
ruby: ruby 2.5.3p105
rails: Rails 5.2.2
です。DBはmysql5.7。
前提として、 rails new [APP_NAME] --api -d mysql
でアプリケーションを生成していることとする。まあAPIモードじゃなくても同じだと思う。
Bundlerのバージョン
remote: ! remote: ! You must use Bundler 2 or greater with this lockfile. remote: !
どうやらherokuの初期状態のBundlerは bundler-1.15.2
だそうで、ローカルでBundler2を使っていると怒られる。
herokuにはbuildpackというのがあって、いろんな言語に対応するための仕組みが用意されている。それにBundler2への対応ができるpackがあるので、それを入れると解決する。
$ heroku buildpacks:set https://github.com/bundler/heroku-buildpack-bundler2 Buildpack set. Next release on [APP] will use https://github.com/bundler/heroku-buildpack-bundler2. Run git push heroku master to create a new release using this buildpack.
何故かrubyがdetectedされないときがあって、その場合はrubyのbuildpackを入れると解決する
heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby
これでとりあえずはbundle installができて、 remote: Verifying deploy... done.
が出る。
特にrails自体をいじっていなければ open すればRailsの初期画面が出てきてくれるようになる。
mysql2対応
herokuのデフォルトで設定されるDBMSはPostgreSQLらしい。mysqlでやりたいので変更する。
(Postgresを使う場合でもID/PW/Hostの設定は必要だろうけど)
DBはAddonを使って設定を変える。
ClearDBというアドオンがあって、それを使ってMySQLを立ち上げる。
heroku addons:create cleardb:ignite
そのあとおもむろに heroku config
をすると立ち上がったMySQLの設定が出てくる。
CLEARDB_DATABASE_URL: mysql://ba1d50d1a663b5:891cd108@us-cdbr-iron-east-03.cleardb.net/heroku_4d7ba2ac4dad221?reconnect=true
ここに書かれている ba1d50d1a663b5
がユーザ名、 891cd108
がパスワード、 us-cdbr-iron-east-03.cleardb.net
がホスト名、 heroku_4d7ba2ac4dad221
がDB名になる。
ので、 config/database.yml
の設定をそれに合うように変更する。
[config/database.yml] production: <<: *default database: heroku_4d7ba2ac4dad221 username: ba1d50d1a663b5 password: 891cd108
(わかりやすくするためにpassword直書きしてるけど、普通に環境変数使おうね。 heroku config:set '環境変数名'='891cd108'
で設定できる )
あと、 DATABASE_URL
という環境変数を作って、そこに mysql2://[CLEARDB_DATABASE_URLと同じ]
を入れる。これでadapterがmysql2になってくれる。
そうしたら、 git push heroku master
して、 heroku run rails db:migrate
をして、成功したらOK。
どこか抜けてるかもしれない。もっかいやった時にまた詰まったら追記する。
終わり。
こういう環境構築みたいなので困ると本当にやる気が無くなるので「全部良い感じにデプロイできるマン」欲しい....まあ最初からサーバレスに乗っかれっていう話だけどさ...
SPAはNetlifyで良い感じにCDNとか証明書まで全部やってくれるから最高。多分Netlify + AWS Lambda + Dynamo? が一番手っ取り早いんだろうなあと思ったりした
追記
DB名とかPWとかそのままブログに書いてんじゃねーよって言われるかもしれないから言っておくと値は変えてます
— はぜ (@haze_it_ac) 2019年2月2日