`
fsword
  • 浏览: 168176 次
  • 性别: 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

相关推荐

    map文件分析工具map文件分析工具

    Map文件在软件开发中起着至关重要的作用,尤其是在调试和优化程序时。它记录了编译器和链接器在生成可执行文件或库...对于开源软件项目,Map文件分析工具也能帮助社区成员更深入地了解项目,从而推动项目的改进和发展。

    FREEBSD 文件系统 文件浏览工具

    **FREEBSD 文件系统详解** FREEBSD 是一个基于UNIX的开源操作系统,其强大的稳定性和灵活性吸引了大量的...通过使用专业的文件系统浏览工具,如UFS Explorer,可以在数据丢失或系统故障时,有效地保护和恢复重要数据。

    hex文件转bin文件工具

    本篇文章将详细讲解如何将HEX文件转换为BIN文件,并介绍相关工具及其工作原理。 标题提及的“hex文件转bin文件工具”是一个专门用于将Intel HEX格式(HEX)文件转换为二进制格式(BIN)的工具。Intel HEX是一种文本...

    ini 文件比较工具

    在使用通用的文件比较工具如Beyond Compare进行ini文件对比时,可能会遇到一些挑战。由于ini文件的结构特性,当section或item的位置发生变化,通用工具可能无法准确识别这些变化,导致比较结果不直观或者误导用户。...

    Google Earth KML文件生成工具

    - 文件版本信息(V1.1)表明这可能是工具的更新版本,可能包含错误修复和性能改进。 - "YC"可能代表开发者的姓名缩写或项目代号,具体含义需根据上下文理解。 通过KML文件生成工具,专业人员可以更高效地将CAD数据...

    EXE可执行文件解压工具

    5. **changelog.txt**:这是一个变更日志文件,记录了工具的更新历史和改进之处。 6. **bin**:这个目录可能包含了工具运行所需的其他二进制文件或库,比如动态链接库(DLLs)。 7. **docs**:这个目录很可能包含了...

    ACCESS文件mdb修复工具

    1. 使用最新版本的Access,以获取最新的错误修复和性能改进。 2. 在关闭Access时,确保所有操作都已完成,避免突然断电或强制关闭软件。 3. 定期对mdb文件进行病毒扫描,防止病毒感染破坏文件。 4. 存储数据库文件在...

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

    **TPI NEXT 测试过程改进模型工具** TPI(Test Process Improvement)NEXT 是一个先进的测试过程改进模型,专为软件测试领域设计。该模型旨在帮助组织提升其测试效率和质量,通过系统化的方法来评估、规划和改进...

    二进制文件合并工具 V1.1 (超好用)

    2. 无效文件灰色显示:当工具检测到某个文件无法正常读取或已损坏时,会将其显示为灰色,这一改进提高了用户对文件状态的识别度。这样,用户可以一眼看出哪些文件可能存在问题,避免了因使用无效文件而导致的错误或...

    文件暴力删除工具 1[1].4┊删除运行中文件或者被占用的文件

    3. **安全删除文件**:在确保文件不再被占用后,工具会立即删除文件,避免了常规删除时可能出现的问题。 当然,这种操作需要谨慎进行,因为强制结束进程可能会影响该进程相关的其他功能,甚至可能导致系统不稳定。...

    Java的文件比较工具

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

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

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

    文件批量删除工具

    标题中的“文件批量删除工具”指的是一个专门设计用于删除大量具有特定扩展名的文件的应用程序。这类工具在处理大量数据时非常有用,特别是在系统维护、软件开发或数据分析等场景下,用户可能需要快速清理特定类型的...

    CSV拆分工具.exe

    首先,这个工具非常易于使用,用户只需双击该.exe文件,即可在Windows环境下启动。界面简洁明了,操作流程清晰。第一步,用户需要通过点击“选择文件”按钮来选取需要拆分的CSV文件。确保选择的文件是CSV格式,因为...

    SYS驱动文件安装加载启动工具.rar

    在压缩包内的“易语言SYS驱动文件安装加载启动工具源码”,表明这个工具是使用易语言开发的。易语言是一种中国本土化的编程语言,其语法简洁,适合初学者学习,同时也被广泛应用于系统工具和应用软件的开发。通过...

    PSP游戏 iso文件RIP工具包 ISOGEN1.57.rar

    4. 更新说明.txt:这个文本文件应该包含了关于工具包的新功能、改进和修复的详细信息,帮助用户了解如何使用新版本。 总的来说,PSP游戏ISO文件RIP工具包ISOGEN1.57是一个专为PSP玩家设计的实用工具,它能够帮助...

    文件搜索自制工具.zip

    【标题】"文件搜索自制工具.zip" 涉及的核心知识点是使用C++语言开发文件搜索工具。在计算机科学中,文件搜索工具是用于帮助用户快速定位和查找计算机上特定文件或文件夹的应用程序。这类工具通常具有高级过滤功能,...

    pbl文件打开工具.zip

    PBL文件是Progress 4GL编程语言所使用的数据库文件,它存储了应用程序的结构、数据和逻辑。当你收到一个名为“pbl文件打开工具.zip”的压缩包时,这通常意味着里面包含了一个专门用于打开和操作PBL文件的应用程序,...

    c# 局域网文件传输工具

    作为开源软件,【C# 局域网文件传输工具】的源代码可供开发者研究和改进。这意味着用户和开发者可以根据自己的需求进行二次开发,添加新功能或者优化现有功能,从而满足更多样化的场景需求。同时,开源也意味着它不...

    LG手机官方固件KDZ、TOT文件提取工具

    在本文中,我们将深入探讨如何使用特定工具来提取LG手机的KDZ和TOT文件,以及相关知识点。 首先,`Ionic.Zlib.dll`是一个动态链接库文件,它是用于压缩和解压缩数据的库,基于 zlib 库。在LG固件提取过程中,这个库...

Global site tag (gtag.js) - Google Analytics