如何用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 ...
随机推荐
- Spring学习(三)——Spring中的依赖注入的方式
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...
- js与jquery的区别
var html = $('<a target="_blank" href="' + adCompContent.clickURL + '">< ...
- overlay-2
<script src="/jquery.js"></script><script type="text/javascript"& ...
- QLabel添加图片链接
<a href = "http://1450591036.qzone.qq.com"><img src=://splash.png height="30 ...
- 使用Ps制作透明ico
准备好图片 打开Ps新建透明图片->抠取图片->复制粘贴 保存为gif格式->使用ico在线转换即可
- JQuery思维导图
- 【HDU 2160】母猪的故事
题 Description 话说现在猪肉价格这么贵,著名的ACBoy 0068 也开始了养猪生活.说来也奇怪,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪. 不过光生小猪也 ...
- Nutch的配置以及动态网站的抓取
http://blog.csdn.net/jimanyu/article/details/5619949 一:配置Nutch: 1.解压缩的nutch后,以抓取http://www.163.com/为 ...
- Visual Studio IIS Express 不支持.json后缀的mime类型
vs默认web调试工具中并不支持.json后缀的mime类型. 如何解决,两个方案: 局部单应用:web.config: <system.webServer> .... <stati ...
- 锋利的jQuery-4--trigger()和triggerHandler()
trigger()方法触发事件后,会执行浏览器默认操作. $("input").trigger("focus") 以上的代码不仅会执行input绑定的focus ...