【问题标题】:How do I move my existing rails app onto heroku? (sqlite to postgres)如何将现有的 Rails 应用程序移动到 Heroku? (sqlite 到 postgres)
【发布时间】:2018-12-06 16:38:39
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails postgresql sqlite heroku heroku-cli


    【解决方案1】:

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

    -- 在此过程中将您的本地开发人员更新为 postgres --

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

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

    您需要先使用具有您的用户名的用户在本地安装和配置 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. rake db:setup
    7. cd [应用程序根目录]
    8. 用数据加载 postgres 数据库 - pgloader ./db/development.sqlite3 postgresql:///[name of postgres dev db]
    9. 删除gem 'sqlite3'
    10. 捆绑安装
    11. 启动服务器 - rails server
    12. test by visiting app at localhost:3000

    在 heroku 上设置新应用

    Follow these instructions from 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 应用进行测试

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

    资源:

    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]
    

    【讨论】:

    • 我非常喜欢这个 - 很棒的答案。
    • 你会如何认证? rake db:setup 给我Couldn't create '..._dev' database. Please check your configuration. rake aborted!
    • 我设法做到了,首先creating a user,在我的database.yml文件中定义用户名和密码,然后使用这个命令而不是你的:pgloader ./db/development.sqlite3 postgresql:///[username]:[password]@[name of postgres dev db]
    【解决方案2】:

    嘿,伙计,你在下面的链接中有你需要的一切

    How to change from SQLite to PostgreSQL and deploy on heroku

    如果您还有任何疑问,请告诉我 问候

    【讨论】:

    • 2 个问题。首先,抱歉,由于 gem 冲突,我无法安装水龙头。该项目已有 8 年历史,heroku 不再推荐。其次,如果我让这个工作,这篇文章仍然没有解释如何将数据从本地传输到 heroku。这就是我开始的地方,也是我决定添加上述步骤的原因
    • 明白了,亲爱的朋友,如果heroku不再推荐它,这样做的目的是什么?
    • 现在他们建议让您的开发环境模仿您的生产环境,然后使用他们的 heroku pg:push 和 pg:pull 移动您的数据(如果您使用的是 postgres)。我在 heroku 上找到的上一篇关于水龙头的文章是从 2009 年开始的。我应该说,水龙头可能完全适合你,如果是这样,你提到的文章应该很好用。我只是无法让它工作,所以我想看看当前的技术是什么。干杯!!!
    • 非常好的问候我的朋友
    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 2017-06-09
    • 2021-11-12
    • 2014-06-27
    • 2017-10-20
    • 1970-01-01
    • 2017-02-26
    • 2017-08-17
    相关资源
    最近更新 更多