【问题标题】:Rake tasks and migration on Heroku without downtime在 Heroku 上执行任务和迁移,无需停机
【发布时间】:2019-09-19 15:27:53
【问题描述】:

上下文

我正在使用 Heroku 为我的 Rails API (v5.2) 提供 PostgreSQL 数据库,

通常,在一些迁移之后,我必须手动运行一些特定的 rake 任务。

这些 rake 任务通常会先删除表中的所有行,然后再使用不同的数据重新创建它们。

这对我来说是个问题,因为它会造成大约 10 分钟的停机时间。 20 分钟,每周两次(通过打开和关闭 Maintenance mode)。

问题

我想避免两次迁移之间的停机时间。

预期解决方案

为此,我计划将Heroku prebootrelease phase tasks 一起使用。

为我的应用程序激活preboot 后,我将在我的Procfile 中放置一个脚本

release: ./release-tasks.sh

release-tasks.sh 文件中类似:

heroku run rake my_rake_task --app myApp

问题

  • 这是一个好的/好的解决方案吗?

  • 确定在迁移阶段,用户将能够 在新数据库上线之前查询“旧”数据库?

  • 有没有办法按需激活发布脚本? (例如使用 Heroku中的环境变量? -- 我不会每次迁移都需要它)。

【问题讨论】:

    标签: ruby-on-rails postgresql heroku ruby-on-rails-5 rake-task


    【解决方案1】:

    这是一个很好的解决方案,是的。发布阶段旨在帮助在部署应用程序时运行迁移。

    不过,在您的特定情况下,这不会阻止停机。发布阶段不会在每次发布时都启动一个新数据库。它只是使用您的命令运行one-off dyno

    您唯一的解决方案是更改迁移策略以避免删除和重新创建所有内容。根据您的操作,您可以只更新/添加/删除您需要的数据。
    或者您可以使用新数据创建一个新的临时表,然后删除旧表并将新表重命名为其永久名称。
    不过,这两种解决方案都需要您自己编写代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 2020-10-09
      • 2015-10-25
      • 2021-09-25
      • 2011-02-07
      • 2020-03-08
      • 2016-11-23
      • 1970-01-01
      相关资源
      最近更新 更多