`
fsword
  • 浏览: 169076 次
  • 性别: 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文件分析工具也能帮助社区成员更深入地了解项目,从而推动项目的改进和发展。

    ini 文件比较工具

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

    EXE可执行文件解压工具

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

    ACCESS文件mdb修复工具

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

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

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

    hex文件转bin文件工具

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

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

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

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

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

    pbl文件打开工具.zip

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

    一种用于合并两hex文件的简单工具

    在压缩包中的“hex合并-百度手环开源”文件,可能是这个工具的源代码或者是关于如何使用这个工具的示例或文档。开源意味着社区可以查看、学习甚至修改源代码,这对于开发者来说是非常宝贵的资源,他们可以根据自己的...

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

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

    Java的文件比较工具

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

    CSV拆分工具.exe

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

    c# 局域网文件传输工具

    无论是文件传输进度的实时反馈,还是在发生错误时给出的明确提示,这些交互体验上的改进都使得文件传输变得更加直观和便捷。用户可以根据提示信息了解当前文件传输的状态,进行相应的操作或调整,从而优化整个传输...

    文件搜索自制工具.zip

    本文将深入探讨使用C++开发文件搜索工具的核心技术,并结合"文件搜索自制工具.zip"这一实际案例,分析其设计与实现,以及绿色中文版的特点和优势。 首先,我们来看看文件搜索工具的核心功能。这类工具能够帮助用户...

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

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

    InstallShield_CAB文件解包工具

    4. **使用方法**:使用 InstallShield CAB 文件解包工具通常包括打开 CAB 文件,浏览其内容,选择要解压的文件,然后指定目标解压位置。工具可能还会提供搜索功能,方便查找特定文件。 5. **版本信息**:提到的 ...

    GIS中shp文件修复工具

    这种工具可能采用更复杂的算法来分析文件内容,通过比较相邻记录或者使用备份信息来重建损坏的数据。对于丢失的或不完整的记录,它可能尝试通过现有数据的模式推断出缺失的信息。 在修复过程中,这些工具可能会创建...

    Android APK xml 批量解密工具

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

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

    2. 使用虚拟中间目标点法:这种方法引入额外的虚拟目标点,作为从当前位置到实际目标点的过渡阶段。机器人首先被引导到达这个虚拟目标点,然后再继续向真实目标前进。这样可以避免机器人直接面对强大的斥力场,从而...

Global site tag (gtag.js) - Google Analytics