如何在生产Rails应用程序中管理一组定期重新创建的mysql表?

如何在生产Rails应用程序中管理一组定期重新创建的mysql表?,mysql,ruby-on-rails,ruby,database,Mysql,Ruby On Rails,Ruby,Database,我有一个生产Rails应用程序,它通过ruby脚本提供一组表中的数据,这些表是通过CSV文件的LOAD data LOCAL Infle MYSQL导入构建的。这些表的名称是一致的,架构不会更改。脚本删除/创建表和模式,然后加载数据 但是,我希望重新执行管理数据更改的方式。我需要一个关于如何随时间管理新发布数据的建议,因为该应用程序正在生产中,因此我可以1频繁推送数据更新,而不会中断为用户请求提供服务的应用程序,2在新数据集上线之前进行测试,如果出现问题,可以回滚到以前的表/数据 我的想法是保存

我有一个生产Rails应用程序,它通过ruby脚本提供一组表中的数据,这些表是通过CSV文件的LOAD data LOCAL Infle MYSQL导入构建的。这些表的名称是一致的,架构不会更改。脚本删除/创建表和模式,然后加载数据

但是,我希望重新执行管理数据更改的方式。我需要一个关于如何随时间管理新发布数据的建议,因为该应用程序正在生产中,因此我可以1频繁推送数据更新,而不会中断为用户请求提供服务的应用程序,2在新数据集上线之前进行测试,如果出现问题,可以回滚到以前的表/数据

我的想法是保存一个版本表,并在每次新的重建完成时创建一个记录。最新版本ID可能会被粘贴到database.yml中,每个模型都可以从database.yml中指定一个表名。脚本可以向前或向后移动版本,以确保在新导入时一切正常,而不会破坏旧版本

这是一个好方法吗?已经有这样的图案了吗?这似乎有点类似于Rails的迁移。有没有插件或gem可以帮助进行这种数据管理

更新/当前解决方案:我最终创建了database.yml配置,并在导入时创建了表。数据不会因环境而改变,因此它是特定于环境的配置的对等。因为只有四个模型需要更新,所以我明确添加了数据库连接:

建立连接轨。配置。数据库配置[其他数据库]

这样,迁移和查询与Rails一样正常工作。为了继续运行导入,我在每个导入的单独配置中更新数据库名称。我可以通过这种方式手动指定以前的数据库版本,如果出现问题,可以重新启动应用程序

config = YAML.load_file(File.join("config/database.yml"))
config["other_db"]["database"] = OTHER_DB_NAME
File.open(path, 'w'){|f| f.write(config.to_yaml)}

一种选择是使用软删除或是活动列。如果您需要知道记录何时被替换/删除,还可以为“导入日期”和“删除日期”添加列。加载新数据时,默认值为“活动”为“假”。应用程序可以通过使用与生产应用程序不同的查询来预览新加载的数据,并且当您准备升级新数据时,可以在单个事务中进行预览,以便生产应用程序以原子方式获得更改

这比试图维护多个表要简单,但将以前删除的行和刚导入但尚未激活的传入行分开会有一些复杂性