Railsアプリを何も変更せずにそのままHerokuにデプロイすると、
こんなエラーが来ます。
原因は主に2つ。
- データベースをSQLite3からPostgreSQLに変えていない。
- デプロイ後、
heroku run rake db:migrate
を実行していない。 - 他の原因。(Gemなど)
ここでは1.の場合の対処法を書いていきます。
RailsアプリはそのままHerokuにデプロイしても動きません。
- Railsの標準データベースは SQLite
- Herokuのデータベースは PostgreSQL
以下の手順で、先に本番環境のデータベースをSQLiteをPostgreSQLに変えないといけないのです。
1. /Gemfile を書き換える
変更前
/Gemfile
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
変更後
/Gemfile
# 開発環境(ローカル)ではSQLite3を使用
gem 'sqlite3', group: :development
# 本番環境(heroku)ではPostgreSQLを使用
gem 'pg', group: :production
変更後、以下のコマンドをたたいて、gemをインストール
$ bundle install
これで、本番環境(Heroku)でPostgreSQLが使えるようになります。
2. /config/database.yml を書き換える
productionの項目を下記のように変更する
/config/database.yml
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
# インデントは必ず半角スペース2つ
これで、本番環境(Heroku)で使用するデータベースをPostgreSQLに設定しました。
3. デプロイ
前提
- Heroku アカウント取得済み
- Heroku CLI インストール済み
- Git インストール済み
# アプリのディレクトリに移動
$ cd your_project_path
# Heroku CLI にログイン (初回のみ)
$ heroku login
# 新規Herokuアプリの作成 (作成済みの場合は省略)
$ heroku create your-app-name
# 変更のコミット
$ git add .
$ git commit -m "Add pg gem for Heroku"
# リポジトリのプッシュ (アプリのデプロイ)
$ git push heroku master
# データベースのマイクレーションを行う (Heroku上のデータベースを起動)
$ heroku run rake db:migrate
# ブラウザーでHerokuアプリを開く
$ heroku open
これでアプリは http://your-app-name.herokuapp.com
で動いているはず。
動いていたら乾杯!