how-to-use-rake-tasks-to-generate-migration-sql

Rakefile文件里有load_tasks的方法

http://api.rubyonrails.org/

Load Rake, railties tasks and invoke the registered hooks. Check Rails::Railtie.rake_tasks for more info.Source: hide | on GitHub# File railties/lib/rails/engine.rb, line 451
def load_tasks(app=self)require "rake"run_tasks_blocks(app)self
end

rake_tasks(&block)
If you try to define a set of rake tasks on the instance, these will get passed up to the rake tasks defined on the application's class.

Source: hide | on GitHub# File railties/lib/rails/application.rb, line 270
def rake_tasks(&block)self.class.rake_tasks(&block)
end

相关文档

http://guides.rubyonrails.org/command_line.html

https://github.com/ruby/rake

http://eewang.github.io/blog/2013/07/29/how-to-use-rake-tasks-to-generate-migration-sql/

开始写代码了。

在lib/tasks/文件夹新建migrate.rake

# 根据下面的博客做了一点点修改
# http://eewang.github.io/blog/2013/07/29/how-to-use-rake-tasks-to-generate-migration-sql/
namespace :db do               [ :migrate, :rollback ].each do |n|namespace n do |migration_task| # original_task = migration_task.instance_variable_get("@scope").join ":"
[:with_sql, :to_sql ].each do |t|desc "Run migration, and generated SQL" if t == :with_sqldesc "Generate migration SQL" if t == :to_sqltask t => :environment do |sql_task| original_task = sql_task.name.sub(":#{t}", '')case original_task   when 'db:migrate'    filename = 'upgrade.sql'        when 'db:rollback'   filename = 'rollback.sql'       else                 raise "unkown migration type #{original_task}"end                  ActiveRecord::Base.connection.class.class_eval do# alias the adapter's execute for later usealias :old_execute :execute

  SQL_FILENAME = filename         RUN_SQL = sql_task.name.ends_with?("with_sql")# define our own execute        def execute(sql, name = nil)    # check for some DDL and DML statementsif /^(create|alter|drop|insert|delete|update)/i.match sqlFile.open(SQL_FILENAME, 'a') { |f| f.puts "#{sql};\n" } old_execute sql, name if RUN_SQLelse# pass everything else to the aliased execute
                old_execute sql, nameendendend# create or delete content of migration.sqlFile.open(SQL_FILENAME, 'w') { |f| f.puts "-- Script created @ #{Time.now}" }# invoke the normal migration procedure now
          Rake::Task[original_task].invokeputs "Ran #{original_task} and wrote sql to #{filename}"endendendend
end

这时候来执行$ rake -T db

可以看到新增的功能

rake db:create              # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all t...
rake db:drop                # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to dr...
rake db:fixtures:load       # Load fixtures into the current environment's database
rake db:migrate             # Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)
rake db:migrate:status      # Display status of migrations
rake db:migrate:to_sql      # Generate migration SQL
rake db:migrate:with_sql    # Run migration, and generated SQL
rake db:rollback            # Rolls the schema back to the previous version (specify steps w/ STEP=n)
rake db:rollback:to_sql     # Generate migration SQL
rake db:rollback:with_sql   # Run migration, and generated SQL

$ mysqldump -uroot -p ott_remote_cms_development > back.sql

$ rake db:drop

$ rake db:create

$ rake db:migrate:with_sql

$ mysql -uroot -p ott_remote_cms_development < back.sql

$ cat upgrade.sql

把sql发给dba就可以了,确实太麻烦了。

转载于:https://www.cnblogs.com/iwangzheng/p/5333474.html

如何用rake tasks 生成migration对应的sql相关推荐

  1. 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)

     不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN) 生成对抗网络(Generative Adversarial Networks,GAN)最早由 Ian Goodfello ...

  2. python生成xml界面,Python如何用dom模块生成XML文

    Python如何用dom模块生成XML文件呢? 主要方法三点: 首先.生成XML节点(node) createElement("node_name") 然后.给节点添加属性值(At ...

  3. 如何用Word 2013生成图表目录

    之前写过如何用Word自动生成目录(Table of contents),现在写一下如何用Word生成图标目录(包括list of figures and list of tables), 操作的对象 ...

  4. 如何用gcc编译器生成动态链接库*.so文件(动态库)

    如何用gcc编译器生成动态链接库*.so文件(动态库) 当源文件为string.c时,生成动态链接库,假设名称为libstr.so 生成动态链接库的命令行为: gcc -fPIC -shared -o ...

  5. 如何用纯文本生成漂亮的表格?

    巧了~不是,近期在写博客,也希望制作格式化的文本表格.这有一款在线制作漂亮的文本表格工具,纯文本输出. 如何用纯文本生成漂亮的表格? - Ayayo的回答 - 知乎 https://www.zhihu ...

  6. 超详细AI二维码制作教程:手把手教你如何用Stable Diffusion 生成一个创意二维码?

    AI已来,未来已来! 来势汹汹的人工智能,如同创世纪的洪水,正在全世界的范围内引发一场史无前例的科技革命.AI正在改变世界!而我们正是这场巨变的见证者. 今天我们要介绍的内容就是:如何利用AI工具St ...

  7. tp5循环查询语句_如何用Excel快速生成SQL语句,用过的人都说好

    Excel的公式自动生成想必大家都知道了,就是写好一个公式后直接往下拖,就可以将后面数据的公式自动生成. 今天我们就用这个功能来快速生成SQL语句. 导入Excel数据 Excel的数据有多种方式,这 ...

  8. 如何用Excel快速生成SQL语句,用过的人都说好

    导读:Excel的公式自动生成想必大家都知道了,就是写好一个公式后直接往下拖,就可以将后面数据的公式自动生成. 今天我们就用这个功能来快速生成SQL语句. 作者:丶平凡世界 来源:SQL数据库开发(I ...

  9. java 根据实体对象生成 增删改的SQL语句 ModelToSQL

    2019独角兽企业重金招聘Python工程师标准>>> java 根据实体对象生成 增删改的SQL语句 ModelToSQL 转载于:https://my.oschina.net/m ...

最新文章

  1. 号称下一代可视化监控系统,结合SpringBoot使用,贼爽!
  2. TabHost的使用(一)
  3. Linux常用命令——fsck
  4. Leetcode 107. 二叉树的层次遍历 II 解题思路及C++实现
  5. 多线程—synchronized及同步器
  6. 学习C++不要纠结了
  7. python默认参数不能定义为可变对象类型
  8. ssis组件_SSIS脚本组件概述
  9. 【转载】使用 Google Guava 美化你的 Java 代码
  10. mysql 遍历二叉树_数据结构-二叉树遍历
  11. Grid++Report——打印功能
  12. Oracle数据库以及客户端下载资源
  13. 思科交换机常用命令及配置
  14. 产品干货1:如何套用闫荣的产品心法?
  15. 《考研公共课复习指导》数学篇1:考研数学策略
  16. 用mysql征途改等级教程_征途各等级升级经验表附带功勋换经验比例
  17. android 车载app怎么开发,Android开发智能车载App(1)---android控件及属性介绍
  18. shutter截图编辑功能
  19. excel函数公式大全,最常用的6个公式
  20. 图的遍历(DFS和BFS)

热门文章

  1. asp.net 多条件查询
  2. Kylin 2.0升级总结
  3. mysql连接超时timeout问题
  4. 服务器proc文件,特殊文件系统proc
  5. go语言 c# 混合编程 pdf,C# 结合 Golang 开发
  6. lisp遍历表中所有顶点_三十张图片让你彻底弄明白图的两种遍历方式:DFS和BFS...
  7. 十道解分式方程及答案_100道八年级分式方程及答案.
  8. 智能机器人路径规划及代码_AI割草机器人用ML+传感器自动规划路径
  9. linux使用u盘的过程是,图文详解Linux下使用U盘的方法
  10. linux终端的背景_如何在终端显示图像缩略图 | Linux 中国