`
fsword
  • 浏览: 164708 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

改进一下昨天的工具,不再使用中间文件

 
阅读更多

[PS: javaeye上的评论好像不能提交,只好另写一篇了]

 

昨天写的小工具需要把database.yml改来改去的,不能自动化,今天上午搞了一把,直接建立两个数据库连接,然后数据库对数据库copy

使用时将旧的数据库配置文件复制为 old_database.yml ,配置好新的 database.yml 就可以提交代码了,服务器上更新一下,然后运行 rake data:copy 就ok了

 

 

namespace :data do
  desc "copy data from old database"
  task :copy => 'db:migrate' do
    config = YAML::load(ERB.new(IO.read('config/old_database.yml')).result)
    $spec = config[Rails.env].inject({}) do |hash, value|
      hash.update value[0].to_sym => value[1]
    end
    (ActiveRecord::Base.connection.tables - ["schema_migrations"]).each {|t|
      Rails.logger.info "copy #{t}"
      new_clazz, old_clazz = prepare_class t
      old_clazz.all.each{|o|
        new_o = new_clazz.new(o.attributes)
        new_o.id = o.id
        new_o.save!
      }
    }
  end

  private
    def prepare_class table_name
      class_name = table_name.camelize.singularize
      eval %Q[
        class #{class_name}Old < ActiveRecord::Base
          establish_connection $spec
          set_table_name '#{table_name}'
        end
      ]
      Object.send :remove_const, class_name rescue nil
      eval("class #{class_name} < ActiveRecord::Base; end")
      [class_name.constantize, "#{class_name}Old".constantize]
    end
end
 
0
0
分享到:
评论
1 楼 fsword 2011-09-02  
再补充一个mongodb的
  desc "copy data from old database to mongodb"
  task :mongoid => 'db:migrate' do
    config = YAML::load(ERB.new(IO.read('config/old_database.yml')).result)
    $spec = config[Rails.env].inject({}) do |hash, value|
      hash.update value[0].to_sym => value[1]
    end
    (ActiveRecord::Base.connection.tables - ["schema_migrations"]).each {|table_name|
      Rails.logger.info "copy #{table_name}"

      class_name = table_name.camelize.singularize
      eval %Q[
        class #{class_name}Old < ActiveRecord::Base
          establish_connection $spec
          set_table_name '#{table_name}'
        end
      ]
      Object.send :remove_const, class_name rescue nil
      eval %Q[
        class #{class_name}
          include Mongoid::Document
          store_in :#{table_name}
        end
      ]
      new_clazz, old_clazz = [class_name.constantize, "#{class_name}Old".constantize]

      old_clazz.all.each{|o|
        attr_hash = o.attributes.inject({}) do |hash,v| hash.update v[0] => ((v[1].is_a? Time) ? v[1].utc : v[1]) end
        new_o = new_clazz.new(attr_hash)
        new_o.save!
      }
    }
  end

相关推荐

    改进labelImg工具使用

    改进labelImg工具使用

    软件开发过程改进 改进方法和工具使用

    软件开发过程改进,本内容主要是软件开发中的项目管理知识;1)引用敏捷开发管理技术;2)软件开发工具和流程改进;3)软件功能的改进方法和工具使用;

    TPI NEXT 测试过程改进模型工具

    不错的一个测试过程改进评估模型工具。压缩包里包括:TPI NEXT工具, 工具使用手册, 及TPI NEXT对CMMI的映射关系。英文

    DiffPDF(pdf文件比较工具)官方正式版V6.0.0 | pdf对比工具下载

    这是一款非常好用的PDF文件比较工具软件,可以比较两个PDF文件的文字和布局方面的不同,在不同的地方会用特殊颜色来进行注释,该pdf对比工具对于我们来说非常有用,比如php代码升级之后,有些地方会有改进,如果你想...

    常用质量管理工具和改进方法PDCA课件

    常用质量管理工具和改进方法PDCA课件,常用质量管理工具和改进方法PDCA

    阿海文本文件工具箱 v1.6

    阿海文本文件工具箱是一个功能强大、...阿海文本文件工具箱v1.6改进: 1、修正批处理某些情况下的错误 2、增加IE预览、排序、去重功能。 3、排序、去重功能以行为单位,目前暂不支持大文件 4、去重功能包含排序功能

    Java文本文件合并工具

    使用场景及目标: 用户可以指定多个输入文本文件的路径,然后使用该工具将这些文件的内容合并成一个输出文件,以便于整合和处理文本数据。其目标是提供一个方便、快速的方式来合并文本文件,减少手动复制粘贴的工作量...

    SQL小工具 批量执行SQL脚本文件(WinForm开发 .Net 2.0)

    其中,App.config为工具配置文件, ;DataBase = master;User ID=sa; password="/&gt; 上述 ;DataBase = master;User ID=sa; password="/&gt;中,value的值为数据库连接字符串。 Server=实例名;DataBase=数据库名;...

    Android APK xml 批量解密工具

    在网上找到了一个工具,可以完美地解密xml文件,但这个工具的使用方法是:调cmd 然后AndroidManifestConver.exe c:\src.xml c:\dest.xml(前者是原文,后者是解密后的文件)。如果需要解密的xml文件较多,这个办法...

    改进斥力场函数和使用虚拟中间目标点法解决传统人工势场法局部极小值问题.rar

    改进斥力场函数和使用虚拟中间目标点法解决传统人工势场法局部极小值问题的MATLAB代码

    Java的文件比较工具

    使用场景及目标: 用户可以指定两个文本文件的路径,工具会逐行比较这两个文件的内容,找出差异之处并报告行号和具体差异内容。目标是提供一个可视化的方式来检测文件内容之间的差异,以便进行适当的处理,如修复错误...

    JAVA文件传输工具

    我自己做的Java文件传输工具,可以传送超大文件,所有源代码都打包到jar文件中去了,源程序均有注释。用WinRar加压即可。不过还有些许bug,在以后的版本中会继续改进,希望大家多支持。

    Java简单的文件扫描工具

    使用场景及目标: 用户可以指定一个目录路径,工具将扫描该目录下的所有文件和文件夹,输出详细的文件信息,包括文件名、路径、大小和最后修改时间。目标是提供一个方便的方式来浏览和检查目录结构,以满足不同场景下...

    CMMI 3级软件过程改进方法与规范模板文件

    CMMI 3级软件过程改进方法与规范模板文件

    web文件更新工具

    之前三年里,有一年半的时间是负责项目的管理和开发工作... 在此分享下,又需要的朋友可以下载试试,当然这个工具也许还有一些可以优化的地方,在接下来的时间,如果有需要我会继续改进更新。 有什么不足,欢迎讨论。

    recuva数据文件恢复工具

    recuva 是一个免费的 Windows 平台下的文件恢复工具,它可以用来恢复那些被误删除的任意格式的文件,能直接恢复硬盘、闪盘、存储卡(如 SD 卡,MMC 卡等等)中的文件,只要没有被重复写入数据,无论格式化还是删除均...

    基于python 3.7和pypdf2开发的pdf文件合并工具代码

    基于python 3.7和pypdf2开发的pdf文件合并工具代码,实现了多个pdf文件中提取页面,合并成一个pdf文件或者把一个文件夹下的所有pdf文件合并成一个pdf文件的功能。

    使用线程复制文件的改进

    程序“使用线程复制文件”用临界区;来同步线程。 结果不理想,这次使用事件来同步线程。

    持续改进工具之记录表的使用.ppt

    持续改进工具之记录表的使用.ppt

    改进型StarUML工具

    我们公司对开源UML工具StarUML进行的改进,修改完善了很多地方,当然也有很多不完善的地方,欢迎大家批评指正。

Global site tag (gtag.js) - Google Analytics