kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

HerokuにMySQL+NginxのRailsアプリを移管した

さくらのVPSで運用してたRailsのアプリだが、ほとんど放置状態になっているのにも関わらず月1000円ぐらい払い続けているのがもったいないのでherokuのフリープランに移管した。

つまずきつつ解決したことなどを健忘録的に書き残しておく。

Ruby や gem のバージョンアップ

Macの場合入れるだけで大体つまずく

stackoverflow.com

qiita.com

次からはDocker使ったほうがええんじゃないかと思った。シンプルにググったらなんとかなるものが多いからがんばれ

一回 Gemfile.lock を消して bundle install して一気に依存解決するという技があった

precompile

デプロイはGithubリポジトリ指定するだけで簡単にできたがCSSがあたっていない。

precompileに設定が必要で、まず下記のgemをproductionに指定する。

gem 'rails_12factor'

あとは bundle exec rake assets:precompile もしておく。

DBのインポート

DBはプラグインという形で提供されている。

PostgreSQLで問題ない場合はPostgresを使うのが無難っぽいが、MySQLを使いたかった。

devcenter.heroku.com

heroku addons:create cleardb:ignite というコマンドでインポートできると公式に紹介があるが、--fork コマンドはMySQLサーバーがpublicにアクセスできるところにある場合に使えるみたいで、無効なURLを渡しても静かに失敗する。

JawsDBはフリーの制限が結構厳しくて、DBのサイズによってはINSERT時に勝手にRejectされたりするっぽい。

stackoverflow.com

で結局いかの記事を参考にClearDBにmysqlコマンド使って書き込むってやつをやった。

fuzzyblog.io

JawsDBを例に書いてあるがClearDBでも同様にできる。ホスト名とかパスワードとかどこ?!ってなるがheroku config で出てきたmysql:の連結URLをバラせばいける。

heroku config -a [app-name]

最後にDATABASE_URLを指定するのだが、そのときはmysql:をmysql2:に変更する。

heroku config:set DATABASE_URL='mysql2://~~~' -a [app-name]

独自ドメインの設定

設定のDNS Targetからアドレスを持ってきて

f:id:kumamotone:20200104154121p:plain

CNAMEに設定すればOK

f:id:kumamotone:20200104154101p:plain

以下日記

Mac上でRailsアプリだが、Herokuにはかなりあっさりデプロイすることができた。一方さくらのVPSはというと、VPS自体に罪はないのだけどなんかいつからかnginxのソケットがなんとかで落ちてて、productionのlogはlogrotateしてなかったので20GBとかになってた ほかにも罠は色々ある気がするけど日常的にサーバー管理してないのでもう1〜2年置くとさっぱり思い出せんし再度デプロイするのにサクッとできる自信は全然ない。マネージする範囲は絞ったほうがいいな〜と再実感しました。おわり