我试图从我的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?
答案 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.