【Heroku】Ruby on Rails+MySQLで作ったファイルのデプロイ

f:id:tender-gorilla:20190330141242p:plain
Herokuは無料で作成したファイルをデプロイできる優れたサービス。
Railsで作ったファイルもGitHubと連携すれば勝手にデプロイしてくれる。
ただ、DBを使う場合はそううまく行かない。
Herokuと連携させるところからまとめておく。

条件

  • Ruby on Railsでファイル作成
  • DBはMySQLを使用
  • Herokuのアカウントは取得済み

Herokuを設定

まずはHerokuのコマンドがローカルのターミナルで使えるようにする。
herokuをインストールする。

$ brew tap heroku/brew && brew install heroku

ターミナルからherokuへのログイン

$ heroku login
=> heroku: Press any key to open up the browser to login or q to exit: 

q以外のキーを押すとブラウザが開いてherokuにログインできる。
1回やっておけば、次回以降はこの作業は不要。

Herokuにファイルをアップロード

続いてファイルをアップロードする。
まずはフォルダの作成から。

$ heroku create フォルダ名(記号はハイフンのみ)

アップロードしたいフォルダに移動して、gitリポジトリを作成、add, commitする

$ git init
$ heroku git:remote -a フォルダ名
$ git add .
$ git commit -am "first commit"

commitまでできたらファイルをpushする。

$ git push heroku master

HerokuでDB作成

ではいよいよDB周りを進めてく。
まずはDBを作る

$ heroku addons:create cleardb:ignite
=> Please verify your account to install this add-on plan (please enter a credit card) For more information, see https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify

おっと、初めてだったからクレジットカードの登録が必要とのこと。
https://heroku.com/verifyから登録ができるので忘れずにしておく。
もう一度上のコマンドを入力すればDBの作成が完了。
続いてDBの接続を修正するために環境変数を確認する。

$ heroku config
=> CLEARDB_DATABASE_URL:     mysql://~
LANG:                     en_US.UTF-8
RACK_ENV:                 production
RAILS_ENV:                production
RAILS_LOG_TO_STDOUT:      enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE:          ...

このままだとmysqlにしか繋がらないためエラーが出る。
そこでDATABASE_URLをmysql2で追加してあげる。

$ heroku config:set DATABASE_URL='mysql2://~(ここはCLEARDB_DATABASE_URLと同じ)'

これで環境変数は整ったはず。
というわけでマイグレートしてみる。

$ heroku run rake db:migrate

できた!

データの先入れ

先にデータを入れておきたい場合なんかは、seedファイルを読み込めばOK

$ heroku run rake db:seed

で、多めのデータを入れておくとこんな感じのエラーが出ることがある

Mysql2::Error: User '~' has exceeded the 'max_questions' resource (current value: 3600)

これは無料枠だと時間当たりのデータの読み込み回数が決まっているので出てしまうエラー。
ヤサゴリはしばらく放置してみたら問題なく全ファイル読み込めた。

2回目以降のデプロイ

ローカルで改めて編集したあとはこれでアップロードする。

$ git add .
$ git commit -am "make it better"
$ git push heroku master

これで反映されている。

cssが反映されない場合

ローカルのフォルダからpushするとcssが反映されない時がある。
その時は以下を変更すればできた。
/config/environments/production.rb

config.assets.compile = true <=最初はfalseになってる

ヤサゴリはこれでできた。

デプロイしたサイトの確認

ここまでできたらあとはデプロイしたページを開くだけ。
URLがないけど、このコマンドでブラウザが開いてくれる。

$ heroku open

これでデプロイ完了!