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

    QQ群共享群文件搜索工具批量下载工具

    而“更新内容.txt”则可能包含软件的更新日志或者使用说明,用户可以通过阅读这个文本文件了解软件的最新改进、修复的bug以及如何正确使用工具。 在实际使用中,用户需要注意以下几点: 1. 确保自己的QQ账号有足够...

    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是一种文本...

    Java的文件比较工具

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

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

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

    CSV拆分工具.exe

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

    c# 局域网文件传输工具

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

    InstallShield_CAB文件解包工具

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

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

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

    1工具箱_改进vmd_VMD工具箱_emd、eemd_EMD_vmd_

    标题中的“1工具箱_改进vmd_VMD工具箱_emd、eemd_EMD_vmd_”表明这是一个关于VMD(Visual Molecular Dynamics)工具箱的更新版本,特别强调了emd(Empirical Mode Decomposition,经验模态分解)和eemd(Ensemble ...

    一个好用的Outlook ost格式文件转pst文件的工具

    "ostfileexporterdemo-setup.exe"很可能就是这个转换工具的安装程序,用户可以通过运行它来安装和使用工具。而"URET NFO v2.2.exe"和"URET.nfo"通常与软件的说明或信息有关,可能包含关于如何使用该工具、许可信息...

    忘记文件存放位置,就用文件搜索工具!

    文件搜索工具是日常工作中不可或缺的助手,特别是在处理大量文件时,快速定位到所需文件能显著提高工作效率。在标题“忘记文件存放位置,就用文件搜索工具!”和描述中提到的情况,当你记不清某个文件存储的具体位置...

    跨Windows和Linux操作系统的开源文件同步工具

    “rsync”是文件同步工具中一个知名的名字,它是一个广泛使用的开源工具,尤其在Linux环境中。rsync以其高效的数据传输和增量同步能力而著名,它能够仅传输文件的变化部分,而不是整个文件,从而大大节省了网络带宽...

    文件隐身工具

    "文件隐身工具",顾名思义,是一种用于保护个人隐私和重要数据的软件工具,其主要功能是隐藏、加密或伪装电脑中的文件和文件夹,以防止未经授权的访问。在现代社会,信息安全变得越来越重要,无论是个人用户还是企业...

    Windows上传文件到Linux的工具

    "Windows上传文件到Linux的工具"这个话题恰好聚焦于如何在两种操作系统之间高效地进行文件交换。其中,FileZilla是一个备受推崇的解决方案,它是一个免费且开源的FTP(文件传输协议)客户端,支持多种协议,包括FTP...

    软著代码整理工具,可以实现一键提取文件中的代码并且自动删去空行和注释,便于进行软著申请

    6. **使用流程**:用户通常只需要将待处理的代码文件拖放到工具界面,或指定文件路径,然后点击“整理”按钮,即可完成整个处理过程。简单易用的界面设计是提高用户体验的关键。 7. **安全性与隐私保护**:在使用这...

    .m3u8文件直接转MP4工具

    .m3u8 文件是用于流媒体传输的播放列表文件,主要在互联网上用于分发音频、视频内容。这种格式由Apple公司开发,基于HTTP Live Streaming (HLS) 技术,允许内容分发网络按需提供高质量的视频流。一个.m3u8 文件通常...

Global site tag (gtag.js) - Google Analytics