我有一个使用MySQL Rails应用程序。 该应用程序需要填充SQLite数据库分发到从主MySQL数据库客户端应用程序。 对于SQLite数据库架构将是非常相似的mysql数据库,但不完全相同。 的SQLite数据库将与存储在所述主MySQL数据库的模式和数据的一个子集来填充。 的数据子集将通过在HTTP请求中传递的参数来确定。 这并不是要为维护操作,但MySQL数据库客户端应用程序作为一个SQLite数据库的一个子集的交付。
我想的要修改的水龙头或写入使用金属应用续集连接到这两个数据库传输数据。
任何其他建议,将不胜感激?
免责声明:我是续集的维护者。
续集很可能会做到这一点最简单的方法。 在bin /续集工具可以将MySQL数据库拷贝到一个SQLite数据库,因此,如果你看一下源代码是( http://github.com/jeremyevans/sequel/blob/205d8a04842c143736de76d645a2a955a1ca641f/bin/sequel ),就可以得到如何与续集做到这一点的想法。
由于东西构造方式,这是最简单的可能只是架构直接复制,然后删除不需要的列。 或者,我只是写代码来创建SQLite数据库架构我想要的。
复制数据的代码也许可以用一个什么样的料箱/续集的修改版本。
如果你在一个类似的模型正在研究这两个数据库,你应该注意的ActiveResource的“属性”的方法返回模型的属性的哈希值,而“属性=”接收到一个属性哈希(它没有包括模型的所有属性)。 牢记这一点,你可以利用的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数据库的“精简版”的环境。
我也geuss,如果你想进行一些修改,你可以修改插件一个很小的数据。
文章来源: Any suggestions for a ruby solution for populating a sqlite database from a mysql source