如何将现有的 Rails 应用程序迁移到 Heroku 上?(sqlite 到 postgres)

Dan*_*ams 3 sqlite postgresql ruby-on-rails heroku heroku-cli

我有一个现有的 Ruby on Rails 应用程序,其中已加载数据。

我使用了默认的 SQLite 数据库设置,因此这是我所有数据所在的位置,但我需要将所有数据放入 Heroku 上的 Postgres 数据库中。

我怎么做?

Dan*_*ams 6

10 分钟从本地 SQLite 迁移到 Heroku Postgres

-- 一路将本地开发更新为 postgres --

假设您在 sqlite 中有一个开发数据库,​​并且您希望将结构和数据移动到 heroku。您将首先将本地环境更改为 postgres,然后将其全部移动。

为什么要改变?您应该始终让您的开发环境反映您的生产环境。Heroku 上默认使用 Postgres。

您需要首先使用具有您用户名的用户在本地安装和配置 Postgres


所需软件:postgresql、pgloader、heroku-cli


脚步

在您的开发环境中从 SQLite 迁移到 Postgres

  1. 安装heroku / pgloader / postgres,并确保postgresql正在您的系统上运行
  2. 备份 sqlite - 将development.sql复制到development_old.sql
  3. 添加gem 'pg'到 Gemfile 的主要部分
  4. 捆绑安装
  5. 更新 config/database.yml (参见下面的示例)
  6. 耙数据库:设置
  7. cd [应用程序根目录]
  8. 用数据加载 postgres 数据库 -pgloader ./db/development.sqlite3 postgresql:///[name of postgres dev db]
  9. 消除gem 'sqlite3'
  10. 捆绑安装
  11. 启动服务器-rails server
  12. 通过访问 localhost:3000 的应用程序进行测试

在heroku上设置新应用程序

请遵循 heroku 的这些说明

将数据移动到heroku

  1. 找到heroku数据库信息-heroku pg:info
  2. 擦除并重置远程数据库 -heroku pg:reset DATABASE_URL --app [name of app]
  3. 将本地数据推送到heroku -heroku pg:push [name of postgres dev db] DATABASE_URL --app [name of app]

注意:如果该数据库的行数超过 10k,您还需要在 Heroku 上升级到爱好基本层

将 Heroku 升级到 Hobby Tier Basic

  1. 创建新层 - `heroku addons:create heroku-postgresql:hobby-basic --app [应用程序名称]
  2. 获取新的数据库 url -heroku pg:info
  3. 打开维护 -heroku maintenance:on --app [name of app]
  4. 复制数据-heroku pg:copy DATABASE_URL [HEROKU_POSTGRESQL_COLOR_URL] --app [name of app]
  5. 推广新数据库 -heroku pg:promote [HEROKU_POSTGRESQL_COLOR_URL] --app [name of app]
  6. 关闭维护
  7. 通过访问heroku应用程序进行测试

如果您遇到问题或边缘情况,这里有一些资源可以提供帮助。

资源:

数据库样本.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]
Run Code Online (Sandbox Code Playgroud)