有关从mysql源填充sqlite数据库的ruby解决方案的任何建议

我有一个使用MySQL的Rails应用程序。 应用程序需要填充sqlite数据库,以便从主mysql数据库分发到客户端应用程序。 sqlite数据库的模式与mysql数据库非常相似,但不完全相同。 将使用存储在主mysql数据库中的模式子集和数据来填充sqlite数据库。 数据子集将由http请求中传递的参数确定。 这不是作为维护操作,而是作为sqlite db将mysql数据库的子集交付给客户端应用程序。

我正在考虑尝试修改点击或使用续集来编写金属应用程序以连接到两个数据库以传输数据。

任何其他建议将不胜感激?

免责声明:我是续集维护者。

续集可能是最简单的方法。 bin / sequel工具可以将MySQL数据库复制到SQLite数据库,所以如果你查看源代码( http://github.com/jeremyevans/sequel/blob/205d8a04842c143736de76d645a2a955a1ca641f/bin/sequel ),你可以得到关于如何使用Sequel做到这一点的想法。

由于构造事物的方式,最简单的方法是直接复制模式,然后删除不需要的列。 或者,我只是编写代码来创建我想要的SQLite数据库模式。

复制数据的代码可能使用bin / sequel中的内容的修改版本。

如果您在两个数据库上处理类似的模型,您应该注意到ActiveResource的“attributes”方法返回该模型属性的散列,而“attributes =”接收属性散列(它不必包含所有模型的属性)。 记住这一点,您可以利用ActiveRecord :: Base.establish_connection方法让两个模型连接到不同的数据库。 这样你可以做类似的事情:

MysqlModel.establish_connection(YAML.load_file(path_to_database_yml)) SqliteMode.establish_connection(YAML.load_file(path_to_other_database_yml)) MysqlModel.all.each do |m| SqliteModel.create(m.attributes) end 

如果模型不共享所有字段,或者在将其分配给Sqlite模型之前需要一些处理,则可以构建一个接收原始属性哈希的方法并对其进行处理以返回Sqlite模型的正确属性哈希。

您的rails应用程序是否根据需要为客户端创建sqlite数据库,或者此进程是带外维护工作吗?

如果它是一个维护工作,我会编写一个shell脚本来转储mysql数据库,在转储上做任何替换以使其特定于sqlite,最后将其导入到sqlite数据库。

也许你可以试试yaml_db插件 ,因为它使用rake任务你可以添加一个执行此操作的cron:

 rake db:data:dump RAILS_ENV=production && rake db:data:load RAILS_ENV=lite 

设置使用sqlite db的’lite’环境。

我也想知道如果你想对数据进行一些修改,你可以稍微修改插件。