我有一个现有的Ruby on Rails应用程序,已经在其中加载了数据。
我使用默认的SQLite数据库设置,因此所有数据都位于该位置,但是我需要所有数据才能进入heroku上的Postgres数据库。
我该怎么做?
答案 0 :(得分:2)
这是假设您在sqlite中有一个开发数据库,并且想要将结构和数据移至heroku。您将首先将您的本地环境更改为postgres,然后将其全部上移。
为什么要更改?您应该始终使开发环境与生产环境相同。在Heroku上,默认使用Postgres。
您首先需要使用具有您的用户名的用户在本地安装和配置Postgres
所需的软件:postgresql,pgloader,heroku-cli
在您的开发环境中从SQLite迁移到Postgres
gem 'pg'
添加到Gemfile的主要部分pgloader ./db/development.sqlite3 postgresql:///[name of postgres dev db]
gem 'sqlite3'
rails server
在heroku上设置新应用
Follow these instructions from heroku
将数据移动到heroku
heroku pg:info
heroku pg:reset DATABASE_URL --app [name of app]
heroku pg:push [name of postgres dev db] DATABASE_URL --app [name of app]
注意:如果该数据库的行数超过1万,则还需要升级到heroku上的嗜好基础层
将Heroku升级到Hobby Tier Basic
heroku pg:info
heroku maintenance:on --app [name of app]
heroku pg:copy DATABASE_URL [HEROKU_POSTGRESQL_COLOR_URL] --app [name of app]
heroku pg:promote [HEROKU_POSTGRESQL_COLOR_URL] --app [name of 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]
答案 1 :(得分:0)