ローカルSQLiteからHerokuPostgresへの10分間の移動
-途中でpostgresにローカル開発者を更新します-
これは、sqliteに開発データベースがあり、構造とデータをherokuに移動することを前提としています。最初にローカル環境をpostgresに変更し、次にすべてを上に移動します。
なぜ変わるのですか?開発環境は常に本番環境を反映している必要があります。 Postgresの使用はherokuのデフォルトです。
まず、自分のユーザー名を持つユーザーを使用して、Postgresをローカルにインストールして構成する必要があります
必要なソフトウェア:postgresql、pgloader、heroku-cli
ステップ
開発環境でSQLiteからPostgresに移行
- heroku / pgloader / postgresをインストールし、postgresqlがシステムで実行されていることを確認します
- backupsqlite-development.sqlをdevelopment_old.sqlにコピーします
-
gem 'pg'
を追加します Gemfileのメインセクションへ - バンドルインストール
- config / database.ymlを更新します(以下のサンプルを参照)
- rake db:setup
- cd[アプリケーションルート]
- postgresdbにデータをロードする-
pgloader ./db/development.sqlite3 postgresql:///[name of postgres dev db]
-
gem 'sqlite3'
を削除します - バンドルインストール
- サーバーの起動-
rails server
- localhost:3000のアプリにアクセスしてテストします
herokuに新しいアプリをセットアップする
herokuからのこれらの指示に従ってください
データをherokuに移動する
- herokudbinfoを見つける-
heroku pg:info
- リモートデータベースを消去してリセットします-
heroku pg:reset DATABASE_URL --app [name of app]
- ローカルデータをherokuにプッシュします-
heroku pg:push [name of postgres dev db] DATABASE_URL --app [name of app]
注:そのデータベースの行数が10,000を超える場合は、herokuの趣味の基本階層にもアップグレードする必要があります
HerokuをHobbyTierBasicにアップグレードする
- 新しい層を作成する-`herokuaddons:create heroku-postgresql:hobby-basic--app[アプリの名前]
- 新しいデータベースのURLを取得する-
heroku pg:info
- メンテナンスをオンにする-
heroku maintenance:on --app [name of app]
- データのコピー-
heroku pg:copy DATABASE_URL [HEROKU_POSTGRESQL_COLOR_URL] --app [name of app]
- 新しいdbをプロモートします-
heroku pg:promote [HEROKU_POSTGRESQL_COLOR_URL] --app [name of app]
- メンテナンスをオフにする
- herokuアプリにアクセスしてテストする
問題やエッジケースが発生した場合に役立つリソースを以下に示します。
リソース:
- https://pgloader.io
- postgresインストールドキュメント
- herokuの新しいレールのインストール
- herokucli情報
- herokucliを使用する
database_sample.yml
default: &default
adapter: postgresql
encoding: unicode
host: localhost
port: 5432
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: [name of app]_dev
test:
<<: *default
database: [name of app]_test
staging:
<<: *default
database: [name of app]
production:
<<: *default
database: [name of app]