使用我的Heroku应用程序使用生产数据填充开发数据库

时间:2016-09-05 15:44:35

标签: ruby-on-rails postgresql heroku sqlite

我试图从我的Heroku应用程序中获取最新的生产数据,并将其恢复到localhost上的开发数据库中。我用

备份了我的生产数据库
heroku pg:backups capture --app <my-app-name>

并使用

下载
curl -o latest.dump `heroku pg:backups public-url`

听起来我需要将它从PostgreSQL转换为Sqlite3,可能会使用像{* 3}}这样的过程,但我并不是100%。有没有更好的方法将二进制latest.dump数据恢复到我的development.sqlite3

编辑:听起来我需要做的就是在我的机器上设置Postgres,重新配置我的RoR应用程序设置以使用Postgres,并使用pg_restore恢复生产数据库。我有点困惑,因为我的database.yml文件:

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3

heroku是否忽略了制作设置并使用Postgres?

1 个答案:

答案 0 :(得分:0)

更好的选择是通过在测试,开发和生产中使用相同的数据库来确保拥有所谓的dev/production parity

使用不同的数据库可能会让错误进入生产阶段,这会让人感到尴尬并且代价高昂。

在本地计算机上设置Postgres,并使用pg_restore镜像生产数据库。

Heroku不支持SQLite,因为它非常不合适:

  

SQLite在内存中运行,并将其数据存储备份在磁盘上的文件中。   虽然这种策略适用于开发,但是Heroku的Cedar堆栈   有一个短暂的文件系统。你可以写信给它,你可以阅读   从中,但内容将定期清除。如果你是   在Heroku上使用SQLite,至少会丢失整个数据库   每24小时一次。   https://devcenter.heroku.com/articles/sqlite3

坦率地说,SQLite适用于移动应用程序,在这些应用程序中,您需要在设备上使用集成数据库,或者只是为了获得一个&#34; hello world&#34; rails app up and running easy,但对于云中的真实网络应用程序来说并不是那么好。

Heroku也将override any of the settings you use in database.yml with the ENV[:DATABASE_URL] variable。所以是的,你是正确的,因为它总是使用Postgres。

有几个easy installers for Postgres, and its available for every package installer imaginable

关注How To Setup Ruby on Rails with Postgres 。这是一个最小的database.yml,可与开箱即用的Postgres.app配合使用:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: hermes_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: hermes_test

# Don't add a production section! It is set by ENV vars anyways.