Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Heroku上的Rake任务和迁移无需停机_Ruby On Rails_Postgresql_Heroku_Ruby On Rails 5_Rake Task - Fatal编程技术网

Ruby on rails Heroku上的Rake任务和迁移无需停机

Ruby on rails Heroku上的Rake任务和迁移无需停机,ruby-on-rails,postgresql,heroku,ruby-on-rails-5,rake-task,Ruby On Rails,Postgresql,Heroku,Ruby On Rails 5,Rake Task,上下文 我使用Heroku为我的rails API(v5.2)提供PostgreSQL数据库 通常,在一些迁移之后,我必须手动运行一些特定的rake任务 这些rake任务通常在使用不同的数据重新创建表之前删除表中的所有行 这对我来说是个问题,因为它会造成大约20分钟的停机时间,每周两次(通过打开和关闭) 问题 我希望在迁移之间避免停机 预期解决方案 为此,我计划在旁边使用 为我的应用程序激活preboot后,我将在我的Procfile release: ./release-tasks.sh 在

上下文

我使用Heroku为我的rails API(v5.2)提供PostgreSQL数据库

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

这些rake任务通常在使用不同的数据重新创建表之前删除表中的所有行

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

问题

我希望在迁移之间避免停机

预期解决方案

为此,我计划在旁边使用

为我的应用程序激活
preboot
后,我将在我的
Procfile

release: ./release-tasks.sh
release tasks.sh
文件中:

heroku run rake my_rake_task --app myApp
问题

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

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

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


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

    但在您的特定情况下,这并不能防止停机。发布阶段不会在每次发布时启动新数据库。它只是用你的命令运行一个命令

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