Ruby on rails Heroku上的Rake任务和迁移无需停机
上下文 我使用Heroku为我的rails API(v5.2)提供PostgreSQL数据库 通常,在一些迁移之后,我必须手动运行一些特定的rake任务 这些rake任务通常在使用不同的数据重新创建表之前删除表中的所有行 这对我来说是个问题,因为它会造成大约20分钟的停机时间,每周两次(通过打开和关闭) 问题 我希望在迁移之间避免停机 预期解决方案 为此,我计划在旁边使用 为我的应用程序激活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 在
preboot
后,我将在我的Procfile
release: ./release-tasks.sh
在release tasks.sh
文件中:
heroku run rake my_rake_task --app myApp
问题
- 这是一个好的/好的解决方案吗
- 是否确定在迁移阶段,用户将能够 在新数据库启用之前查询“旧”数据库
- 有没有办法按需激活发布脚本?(例如使用 Heroku中的env var?--我不会在每次迁移中都需要它)
这是一个很好的解决方案,是的。发布阶段正是为了在部署应用程序时帮助运行迁移 但在您的特定情况下,这并不能防止停机。发布阶段不会在每次发布时启动新数据库。它只是用你的命令运行一个命令 这里唯一的解决方案是更改迁移策略,以避免删除和重新创建所有内容。根据您所做的工作,您可能只需要更新/添加/删除所需的数据。
或者,您可以使用新数据创建一个新的临时表,然后删除旧表并将新表重命名为其永久名称。
不过,这两种解决方案都需要编写自己的代码