herokuデプロイするまでにそれぞれ異なるエラーが続出し手こずったので忘れないようにまとめます。
バージョン
$ rails -v
Rails 5.1.4
herokuログインからの手順
herokuアカウントがある前提で進めます。
以下の手順でまずは試みる
$ heroku login (herokuにログイン)
$ heroku create app12345(app12345という名前で作られます)
$ bundle exec rake assets:precompile # cssをコンパイル
$ git add -A
$ git commit -m "heroku deploy"
$ git push heroku master ←おそらくエラーが出る
エラー出ると思うので直していきます。
- まずはgemfileを確認する
group :production do
gem 'pg' #herokuはpgを使います
gem 'rails_12factor'
end
#⚠︎それまでsqlite3を使っていたらdevelopment環境下に移動すること
2.config/application.rbに
config.assets.initialize_on_precompile = false
3.environments/production.rbも変更
config.serve_static_files = true #rails4系の時はconfig.serve_static_assetsだった
config.assets.compile = true
これで再プッシュして見てください。。
pushが成功したら
$ heroku run rake db:migrate --app app12345
$ heroku open
デプロイ完了!!
pg周りのエラー発生
二つ目のアプリデプロイ時には
pgをbundle installしたときに
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***
こんなエラーが出ましたが、、、
$ sudo env ARCHFLAGS="-arch x86_64" gem install pg -v '0.18.4'
上記コマンドで治りました!
参考)
ayumu-homes.hateblo.jp
pgではなくmysql2でherokuデプロイする方法
既にRailsのアプリがあることが前提とpgでデプロイしたことがある方向けに書いてありますので何卒よろしくお願いします。pgでもデプロイもしたことがない方は上部からご覧下さい。
早速database.ymlを下記のようにしておくことで、環境変数で値を設定できるようにしておきます。
production:
adapter: mysql2 # postgresの場合はadapterをpostgresql
encoding: utf8
database: <%= ENV['DB_NAME'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
host: <%= ENV['DB_HOSTNAME'] %>
port: <%= ENV['DB_PORT'] %>
$ heroku login
$ heroku create example (この場合exampleという名前でheroku上に登録される)
$ git remote -v でリモートを確認
heroku https://git.heroku.com/*****.git (fetch)
heroku https://git.heroku.com/******.git (push)
origin git@developer.exexex.jp:******/*****.git (fetch)
origin git@developer.exexex.jp:*****/*****.git (push)
このように表示されればおk
herokuにDBを追加する
$ heroku addons:create cleardb:ignite
HerokuのアプリにDB情報の環境変数を設定する
まずは設定を確認
$ heroku config
→ DB接続の書式が以下のように表示されるのでそれに従って各環境変数を設定する必要があります
mysql://[username]:[password]@[hostname]/[db_name]?reconnect=true
上の[ ]内に対応させてそれぞれ設定していきます。
$heroku config:add DB_NAME="[db_name]"
$heroku config:add DB_USERNAME="[username]"
$heroku config:add DB_PASSWORD="[password]"
$heroku config:add DB_HOSTNAME="[hostname]"
$heroku config:add DB_PORT="3306" #ちなみにpgの場合は5432
$ heroku config で設定を再確認する
この時、DATABASE_URLがpostgresになっていたら、ここもmysql2にする必要がある。(これ直さないと後で面倒くさいです。。。)
$ heroku config:set DATABASE_URL= 'mysql2://[username]:[password]@[host]/[database]?reconnect=true'
再再度確認
$ heroku config
DATABASE_URLのところが mysql2と成っていればおk。
ついでに
Timezoneとlangの設定もしておく
$ heroku config:add TZ=Asia/Tokyo
$ heroku config:add LANG=ja_JP.UTF-8
ここでローカルレポジトリをherokuへプッシュ!
$ git push heroku master
$ heroku run rake db:migrate
$ heroku open
完了!!
masterブランチ以外でherokuにpushする方法
git push heroku hoge_branch:master --force