NO END FOR LEARNING

Writing blog if you feel tired | 学海无涯 苦写博客

《实战Gradle》译者序

| Comments

Alt text

在京东搜索《实战Gradle》

在淘宝搜索《实战Gradle》

在亚马逊搜索《实战Gradle》

在当当网搜索《实战Gradle》

内容简介

Gradle是Java软件开发中的自动化构建工具,类似的传统工具如Ant和Maven。Gradle吸收或沿用了Maven中比较成功的一些实践,但相对于Maven或Ant又有极强的扩展。

《Gradle in Action》一书全方位的讲解了Gradle这一工具相关的知识,包括Gradle的基本知识,自动化构建的基本概念和最佳实践,以实际案例的方式解释如何使用Gradle进行软件项目构建。

除了基础知识外,由于软件开发绝对不仅仅是实现业务逻辑代码,书中还介绍了一些解决软件开发中常见问题的实践,如多语言,多项目构建,Gradle在持续集成和持续交付中的应用,Gradle构建JVM其他语言,以及Gradle集成Javascript构建等。 云计算和DevOps的兴起,给软件行业带来了翻天覆地的变化,书中对于云计算平台,开源社区中的一些工具与Gradle的结合使用也做了相关的介绍。

因为Groovy用于编写Gradle构建配置的DSL,所以为了帮助读者更好的理解Gradle,本书还讲解了Groovy的基本知识,虽然不足以全方位的讲解Groovy,但是理解Gradle足矣。

译者序

提到自动化构建,你能想到的是什么?是经典的make脚本语言?是曾经统治了Java构建世界的Ant?或者是颠覆了Ant统治地位的Maven? 抑或是即将也正在颠覆Maven的Gradle?不管你想到的哪一个,如果你还在使用Java语言开发软件,那Gradle将是你工具箱中必不可少的一样利器。而《Gradle in Action》将可能是你不可或缺的教材,或者参考书。

第一次接触到Gradle是加入ThoughtWorks的第一个项目,从此以后,我几乎认为Gradle应该是一个Java软件项目的标配,是每一个Java程序员都应该了如指掌的东西。本书结合简单实用的案例,由浅入深地讲解Gradle,正是我在学习Gradle时所希望拥有的一本教材,所以我便欣然接受并参与此书的翻译工作。希望本书能帮助所有将软件质量和开发效率视为软件项目中不可或缺的一环的程序员,把软件开发带到另一个高度。

虽然本书是Gradle的一本实用指南,但本书不仅仅局限于此。软件构建在现代软件开发过程中并不是独立工作的,开发人员通常面临的问题还包括持续集成,持续交付,以及云平台下的基础设施搭建,多语言项目构建等。本书还对如何结合Gradle解决此类问题以及一些常用的工具有一定的说明,如用于持续集成和交付的Jenkins,虚拟化技术工具vagrant等。Groovy语言用于实现Gradle DSL,因此理解基础的Groovy语言对理解Gradle也有极大的帮助,因此本书对Gradle语言的基本功能也做了讲解。

与另外两位同事合作翻译此书的过程,并非一帆风顺,由于物理位置的不同,使得沟通变得困难,我们不得不采用通读对方译文的形式使各自的行文风格尽量保持一致。但这同时也是一个充实有趣的过程,想要把一个单词或一句话翻译的精准到位从而反复推敲,有些技术语言如果直译又会生硬难懂,我们得寻求适合中文的准确表达方式。这些过程无疑是翻译中最大的趣味所在。在这里我想感谢朱本威和杨柳的智慧结晶,感谢出版社同事的辛勤劳作,感谢滕云的严格审校,更感谢Benjamin为Gradle社区带来如此优秀的读物。

博主评论:

朱本威,Java/Ruby软件开发工程师,Gradle系列博客Gradle深入与实战,《实战Gradle》译者之一

《实战Gradle》是一本既适合初学者,也适合有经验人员的经典参考书。它以故事的方式,简单而生动的解释了软件开发对构建的刚需,对比了Gradle的前辈Ant、Maven的优缺点,详细的介绍了Gradle优秀的特性集,并通过范例的方式生动的介绍了如何使用Gradle,是一本不可多得的优秀的Gradle书籍。 - 朱本威

关于运行Active Record数据迁移

| Comments

Active Record数据库迁移是 Active Record提供的一个功能,按照时间顺序管理数据库模式。使用迁移,无需编写 SQL,使用简单的Ruby DSL就能修改数据表,对数据库的操作和所用的数据库种类无关。

你可以把每个迁移看做数据库的一个修订版本。数据库中一开始什么也没有,各个迁移会添加或删除数据表、字段或记录。Active Record知道如何按照时间线更新数据库,不管数据库现在的模式如何,都能更新到最新结构。同时,Active Record还会更新db/schema.rb文件,匹配最新的数据库结构。

db:migrate

Rails提供了很多Rake任务,用来执行指定的迁移。

其中最常使用的是rake db:migrate,执行还没执行的迁移中的change或up方法。如果没有未运行的迁移,直接退出。rake db:migrate按照迁移文件名中时间戳顺序执行迁移。

注意,执行db:migrate时还会执行db:schema:dump,更新db/schema.rb文件,匹配数据库的结构。

db:migrate VERSION

如果指定了版本,Active Record会运行该版本之前的所有迁移。版本就是迁移文件名前的数字部分。例如,要运行 20080906120000 这个迁移,可以执行下面的命令:

1
rake db:migrate VERSION=20080906120000

如果20080906120000比当前的版本高,上面的命令就会执行所有20080906120000之前(包括 20080906120000)的迁移中的change或up方法,但不会运行20080906120000之后的迁移。如果回滚迁移,则会执行 20080906120000之前(不包括20080906120000)的迁移中的down方法。

db:rollback

还有一个常用的操作时回滚到之前的迁移。例如,迁移代码写错了,想纠正。我们无须查找迁移的版本号,直接执行下面的命令即可:

1
rake db:rollback

这个命令会回滚上一次迁移,撤销 change 方法中的操作,或者执行 down 方法。如果想撤销多个迁移,可以使用 STEP 参数:

1
rake db:rollback STEP=3

这个命令会撤销前三次迁移。

db:redo

db:migrate:redo 命令可以回滚上一次迁移,然后再次执行迁移。和 db:rollback 一样,如果想重做多次迁移,可以使用 STEP 参数。例如:

1
rake db:migrate:redo STEP=3

这些 Rake 任务的作用和 db:migrate 一样,只是用起来更方便,因为无需查找特定的迁移版本号。

db:migrate:up和db:migrate:down

如果想执行指定迁移,或者撤销指定迁移,可以使用db:migrate:up和db:migrate:down任务,指定相应的版本号,就会根据需求调用change、up或down方法。例如:

1
rake db:migrate:up VERSION=20080906120000

这个命令会执行20080906120000迁移中的change方法或up方法。db:migrate:up 首先会检测指定的迁移是否已经运行,如果Active Record任务已经执行,就不会做任何操作。

修改现有的迁移

有时编写的迁移中可能有错误,如果已经运行了迁移,不能直接编辑迁移文件再运行迁移。Rails 认为这个迁移已经运行,所以执行 rake db:migrate 任务时什么也不会做。这种情况必须先回滚迁移(例如,执行 rake db:rollback 任务),编辑迁移文件后再执行 rake db:migrate 任务执行改正后的版本。

一般来说,直接修改现有的迁移不是个好主意。这么做会为你以及你的同事带来额外的工作量,如果这个迁移已经在生产服务器上运行过,还可能带来不必要的麻烦。你应该编写一个新的迁移,做所需的改动。编辑新生成还未纳入版本控制的迁移(或者更宽泛地说,还没有出现在开发设备之外),相对来说是安全的。

在不同的环境中运行迁移

默认情况下,rake db:migrate 任务在 development 环境中执行。要在其他环境中运行迁移,执行命令时可以使用环境变量 RAILS_ENV 指定环境。例如,要在 test 环境中运行迁移,可以执行下面的命令:

$ rake db:migrate RAILS_ENV=test

参考资料:
1.http://guides.ruby-china.org/active_record_migrations.html