如何用rake tasks 生成migration对应的sql
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_sql
desc "Generate migration SQL" if t == :to_sql
task 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 use
alias :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 statements
if /^(create|alter|drop|insert|delete|update)/i.match sql
File.open(SQL_FILENAME, 'a') { |f| f.puts "#{sql};\n" }
old_execute sql, name if RUN_SQL
else
# pass everything else to the aliased execute
old_execute sql, name
end
end
end
# create or delete content of migration.sql
File.open(SQL_FILENAME, 'w') { |f| f.puts "-- Script created @ #{Time.now}" }
# invoke the normal migration procedure now
Rake::Task[original_task].invoke
puts "Ran #{original_task} and wrote sql to #{filename}"
end
end
end
end
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就可以了,确实太麻烦了。
如何用rake tasks 生成migration对应的sql的更多相关文章
- 如何用JavaDoc命令生成帮助文档
如何用JavaDoc命令生成帮助文档 文档注释 在代码中使用文档注释的方法 /** *@author *@version * */ 生成帮助文档 打开java文件所在位置,在路径前加入cmd (注意有 ...
- VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案
今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库&qu ...
- (转载)根据数据字典表定义的表结构,生成创建表的SQL语句
<来源网址:http://www.delphifans.com/infoview/Article_221.html>根据数据字典表定义的表结构,生成创建表的SQL语句 //1. 类名:T ...
- PHP通过(PDO)Mysql表字段一键生成创建sqlite的SQL
首发于:http://www.zzzzy.com/201406053158.html /** * Mysql表字段一键生成创建sqlite的SQL 2 * @author: Skiychan < ...
- MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具
这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...
- Navicat生成数据库结构同步SQL
作为一个苦逼的技术男,在做开发的时候经常会遇见程序版本升级,数据库结构变化.我们需要一个快捷的方式让客户尽快从旧版本数据库结构更新至新版本数据库结构.如果每做一次改动我们就记录一下当然是好事,但是万一 ...
- 让er studio 生成带说明的sql
一直使用er studion 来建数据库的模型图. 用了几年苦于 erstudion 不能生成带说明注释的sql 语句,每次生成实体之后都要自己去加注释. 今天根据外国朋友的资料找到了办法 需要自己建 ...
- Excel生成Oracle数据库表sql工具类
1.解决问题: 开发文档中字段比较多的时候,建表sql(Oracle下划线命名规范)比较麻烦,容易出错~~ (主要是懒) 特意手写一个工具,根据excel字段,生成建表的sql语句. ~~~末尾附Gi ...
- 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)【转】
本文转载自:https://www.leiphone.com/news/201703/Y5vnDSV9uIJIQzQm.html 生成对抗网络(Generative Adversarial Netwo ...
随机推荐
- [C#]Attribute特性(3)——AttributeUsage特性和特性标识符
相关文章 [C#]Attribute特性 [C#]Attribute特性(2)——方法的特性及特性参数 AttributeUsage特性 除了可以定制自己的特性来注释常用的C#类型外,您可以用At ...
- DOM(三)使用DOM + Css
1.使用getElementsByTagName修改class类别或者追加类别 <ul class="name1" onclick="clickz()"& ...
- 第十一章:WEB浏览器中的javascript
客户端javascript涵盖在本系列的第二部分第10章,主要讲解javascript是如何在web浏览器中实现的,这些章节介绍了大量的脚本宿主对象,这些对象可以表示浏览器窗口.文档树的内容.这些章节 ...
- AngularJs——grunt神器的使用
前面我们已经知道了如何安装grunt,本章节给各位道友介绍如何使用 grunt 的插件,grunt是重点在于如何配置使用 Gruntfile.js,官网上也有很多范例. 1,包装函数 module.e ...
- iOS - 视频循环播放
录制完视频后,我们想在录制视频的预览层上无限循环播放我们的小视频,是不是很炫酷,这时候我们就有三中选择了:1.MPMoviePlayerController2.AVPlayer3.AVAssetRea ...
- 给java应用打包
C:\dollapp\classes> jar -cvf C:\dollapp\deploy\dollapp.jar *.* 上面的jar命令会把 C:\dollapp\classes 下的 所 ...
- iOS开发小技巧--字典和数组的中文输出
一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...
- Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm
目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...
- 关于“wining attitude”
同学转的诺基亚招聘启事上看到这样一则要求:“a real team player with wining attitude”.我的反应先是好奇,后是惊讶!好奇是好奇怎么个wining attitude ...
- --hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
解题思路: 多重背包:第 i 件物品有 j 个可用. 本题中 第 p[i] 类大米 有 c[i] 袋大米可买 ,故本题为多重背包. n(总钱数).m(种类) p[i] 单价 h[i] 重量 c[i] ...