我有一个已经存在数据的Ruby on Rails应用程序。
我使用默认的SQLite数据库设置,因此我的所有数据都在那里,但是我需要把所有数据放入我的heroku上的Postgres数据库中。
我该怎么做?
我有一个已经存在数据的Ruby on Rails应用程序。
我使用默认的SQLite数据库设置,因此我的所有数据都在那里,但是我需要把所有数据放入我的heroku上的Postgres数据库中。
我该怎么做?
假设您有一个使用SQLite作为开发数据库,并且希望将结构和数据移动到Heroku。您将首先更改本地环境为Postgres,然后全部移到Heroku。
为什么要更改?您应该始终使开发环境与生产环境相同。在Heroku上,默认情况下使用Postgres。
您需要首先安装并配置本地Postgres,其中包含具有您用户名的用户
所需软件:postgresql、pgloader、heroku-cli
从SQLite迁移到Postgres
gem 'pg'
pgloader ./db/development.sqlite3 postgresql:///[Postgres开发数据库名称]
gem 'sqlite3'
rails server
在Heroku上设置新应用程序
将数据移动到Heroku
heroku pg:info
heroku pg:reset DATABASE_URL --app [应用程序名称]
heroku pg:push [Postgres开发数据库名称] DATABASE_URL --app [应用程序名称]
注意:如果该数据库包含大于10k行,则还需要升级为Heroku的Hobby Basic级别
将Heroku升级为Hobby Basic级别
heroku pg:info
heroku maintenance:on --app [应用名称]
heroku pg:copy DATABASE_URL [HEROKU_POSTGRESQL_COLOR_URL] --app [应用名称]
heroku pg:promote [HEROKU_POSTGRESQL_COLOR_URL] --app [应用名称]
如果遇到问题或边缘情况,请使用以下资源进行帮助。
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]
Couldn't create '..._dev' database. Please check your configuration. rake aborted!
的错误信息。 - gordiepgloader ./db/development.sqlite3 postgresql:///[username]:[password]@[name of postgres dev db]
- gordie