`
jbf034
  • 浏览: 153579 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Rails Rake指南

阅读更多
Rake是怎么来的?

很多年以前,当 Jim Weirich还在为一个Java项目工作时,他最初的选择也是Makefile,但是很快他意识到:要是能够在Makefile中嵌入Ruby代码,那会是多么的方便呀,于是,Rake就这么产生了。

Rake支持任务创建,任务依赖关系追踪,以及文件编译时间识别。最后一个功能对Ruby程序员应该用不到,但如果你同时还是一个C程序员,那么你可以尝试使用Rake来替代Make。

Rake如何工作

让我们通过一个例子来说明吧,假设我今天很郁闷,想要借酒消愁,这个过程涉及以下几个任务:

买酒
买下酒菜
搞掂它们
假设使用Rake来管理这3个任务,那么我首先需要创建一个Rakefile文件:

task :purchaseAlcohol do
  puts "来瓶五粮液"
end
task :mixDrink do
  puts "上盘花生米"
end
task :getSmashed do
  puts "老板, 啥时学的分身术, 很强嘛?"
end
然后我就可以从Rakefile文件所在的目录来完成这些任务了:


$ rake purchaseAlcohol
来瓶五粮液
$ rake mixDrink
上盘花生米
$ rake getSmashed
老板, 啥时学的分身术, 很强嘛?
很简单吧!但是有些问题,我可不想还没喝酒吃东西就看到老板的分身,这会被人当作精神不正常。

如何组织任务的依赖关系

很简单:

task :purchaseAlcohol do
  puts "来瓶五粮液"
end
task :mixDrink => :purchaseAlcohol do
  puts "上盘花生米"
end
task :getSmashed => :mixDrink do
  puts "老板, 啥时学的分身术, 很强嘛?"
end
搞掂,现在再试试:

$ rake purchaseAlcohol
来瓶五粮液
$ rake mixDrink
来瓶五粮液
上盘花生米
$ rake getSmashed
来瓶五粮液
上盘花生米
老板, 啥时学的分身术, 很强嘛?
就像你看到的,现在我想要醉必须得先喝点酒吃点花生才行,不过一个人喝酒总归有些无聊,所以我想喊些哥们一起来喝,但是我又懒得跟他们解释为啥突然喊他们来喝酒(本人平时比较吝啬),我想到一个偷懒的办法,给他们看文档,但是究竟该怎么为我的Rake任务生成文档呢?

为Rake任务生成文档
再简单不过了:

desc "工作郁闷,想喝点酒"
task :purchaseAlcohol do
  puts "来瓶五粮液"
end
desc "得有点下酒菜"
task :mixDrink => :purchaseAlcohol do
  puts "来盘花生米"
end
desc "开喝,不醉不归"
task :getSmashed => :mixDrink do
  puts "老板, 啥时学的分身术, 很强嘛?"
end
就像你看到的,我的每个任务都有了一个desc字段,现在我和我的朋友们就可以通过rake -T或者rake –task来查看每个任务的文档了:

$ rake --tasks
rake getSmashed # 开喝,不醉不归
rake mixDrink # 得有点下酒菜
rake purchaseAlcohol # 工作郁闷,想喝点酒
Rake命名空间

一旦养成了工作郁闷就喝酒的好习惯之后,你很快就会发现,自己成了个酒鬼,因此你不得不写一大堆Rake任务来集结你的狐朋狗友们,这时你就会发现命名空间的重要性:

namespace :alcoholic do
  desc "工作郁闷,想喝点酒"
  task :purchaseAlcohol do
    puts "来瓶五粮液"
  end
  desc "得有点下酒菜"
  task :mixDrink => :purchaseAlcohol do
    puts "来盘花生米"
  end
  desc "开喝,不醉不归"
  task :getSmashed => :mixDrink do
    puts "老板, 啥时学的分身术, 很强嘛?"
  end
end
namespace :girlfriend do
  desc "那个,喝点红酒吧"
  task :purchaseAlcohol do
    puts "来瓶干红"
  end
end
命名空间允许你将你的任务进行分类,你可以在一个Rakefile内创建多个命名空间,现在输入rake –tasks你会得到如下输出:

rake alcoholic:getSmashed # 开喝,不醉不归
rake alcoholic:mixDrink # 得有点下酒菜
rake alcoholic:purchaseAlcohol # 工作郁闷,想喝点酒
rake girlfriend:purchaseAlcohol # 那个,喝点红酒吧
有用的任务

上面都是扯淡,毕竟人生除了喝酒还有更重要的事情等着我们去做,下面,我们来干点正经事,假设我们需要完成这样一个任务,给定一组目录,如果不存在,就创建它们,我创建的Rake任务如下:

desc "Create blank directories if they don't already exist"
task(:create_directories) do
  # The folders I need to create
  shared_folders = ["icons","images","groups"]
    for folder in shared_folders
    # Check to see if it exists
    if File.exists?(folder)
      puts "#{folder} exists"
    else
      puts "#{folder} doesn't exist so we're creating"
      Dir.mkdir "#{folder}"
    end
  end
end
默认情况下,Rake具有所有File Utils包的功能,当然你也可以通过引用其他库来做任何你想做的事情,那么下一个问题就是:我应该如何在Rails中使用Rake呢?

在Rails中使用Rake

每个Rails应用本身都在带有许多预定义的Rake任务,你可以通过在你的Rails应用的根目录下执行rake –tasks来查看可用的rake任务,别以后了,现在就试试吧,我等你!

要创建新的Rake任务,你只需打开你的Rails应用的lib/tasks目录,并将你的Rakefile命名为”somethins.rake”即可,它会自动被主Rakefile引用,然后你就可以在主目录下调用你的rake任务了,让我们继续上面那个例子:

utils.rake

namespace :utils do
  desc "Create blank directories if they don't already exist"
task(:create_directories) do
  # The folders I need to create
  shared_folders = ["icons","images","groups"]
  for folder in shared_folders
   # Check to see if it exists
   if File.exists?("#{RAILS_ROOT}/public/#{folder}")
    puts "#{RAILS_ROOT}/public/#{folder} exists"
   else
    puts "#{RAILS_ROOT}/public/#{folder} doesn't exist so we're creating"
    Dir.mkdir "#{RAILS_ROOT}/public/#{folder}"
   end
  end
end
end
再次执行rake –tasks,你会看到如下结果

......
rake tmp:pids:clear # Clears all files in tmp/pids
rake tmp:sessions:clear # Clears all files in tmp/sessions
rake tmp:sockets:clear # Clears all files in tmp/sockets
rake utils:create_directories # Create blank directories if they
don't already exist
从Rake任务中可以访问rails model吗?

是的,当然可以,这是我使用Rake最主要的用途:运行一些需要手动执行的任务,或者是需要脱离Rails定期运行的任务,下面是一个简单的例子:

namespace :utils do
  desc "Finds soon to expire subscriptions and emails users"
  task(:send_expire_soon_emails => :environment) do
    # Find users to email
    for user in User.members_soon_to_expire
      puts "Emailing #{user.name}"
      UserNotifier.deliver_expire_soon_notification(user)
    end
  end
end
实在是很简单,你只需要在你的任务之前执行”=> :environment“就可以了。

如果需要在开发模式执行这个任务,直接敲”rake utils:send_expire_soon_emails”就可以了,如果是产品模式,敲”rake RAILS_ENV=production utils:send_expire_soon_emails”,现在如果我想让这个任务每天晚上运行一次,那么,我只需要在cronjob文件中加入下面这行就可以了:

0 0 * * * cd /var/www/apps/rails_app/ && /usr/local/bin/rake RAILS_ENV=production utils:send_expire_soon_emails
分享到:
评论

相关推荐

    rails向导打包

    Rails 向导是 Ruby on Rails 开发者的重要资源,它为初学者和经验丰富的开发者提供了深入理解 Rails 框架的全面指南。本压缩包包含了多个关键主题的详细文档,涵盖了从数据库操作到应用调试等多个方面。让我们逐一...

    rails_review:Ruby Gem检查在Rails样式指南存储库中编译的标准代码。 通过http://www.rubyeffect.com

    运行以下rake任务以在您的应用程序上启动rails样式指南检查。 $ rake rails_review:start 发展历程 签出仓库后,运行bin/setup来安装依赖项。 然后,运行rake spec来运行测试。 您也可以运行bin/console进行交互式...

    教学级Ruby On Rails 手动安装.pdf

    本文将基于给定文件信息,详细介绍Ruby on Rails的手动安装步骤,旨在为初学者提供一份教学级的安装指南。 #### 安装前准备 - **Ruby 解释器**:需先安装Ruby解释器,建议选择稳定版本,如Ruby 1.8.6.111。 - **...

    Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf

    《Ruby on Rails应用程序测试指南》深入解读 一、为何为Rails应用编写测试? 在《Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf》这一指南中,开篇即强调了为Rails应用编写测试的重要性。...

    RAILS2.1的中文版资料

    - IceskYsl负责第一章(Introduction)、第九章(Rake Tasks, Plugins and Scripts)、第十一章(Ruby 1.9)和第十四章(Additional Information)。 - jesse.cai负责第五章(Action Pack)和第十二章(Debug)。 - suave.su负责...

    Ruby-Traceroute一个Rake任务帮助你找到Rails3应用中堵死的路线和未使用的actions

    安装指南将指导用户如何将这个Rake任务集成到现有的Rails 3项目中,而使用文档则会详细解释如何运行和解读分析结果。 总的来说,Ruby-Traceroute是Rails 3开发者的一个宝贵工具,它可以帮助他们优化应用性能,提高...

    Ruby On Rails 面试系列七,一个面试练习题

    总的来说,这个面试练习题涵盖了Rails开发的核心技能:Rake任务管理、测试驱动开发、模型和控制器的实现以及文档编写。理解并熟练运用这些知识是成为一名优秀的Rails开发者的关键。通过深入学习和实践,你可以提高...

    rails资料集合最新

    1. **rails3 文档.chm**:这可能是一个关于Rails 3版本的官方文档或社区编写的指南,.chm格式是Microsoft的帮助文件格式,通常包含了详细的API参考、教程和示例。Rails 3是Rails的一个重要版本,引入了ActiveModel、...

    Agile Web Development with Rails 2nd Edition

    3. **更新配置**:在应用的顶级目录下运行命令`rake rails:update`以完成配置。 一旦Rails 1.2正式发布,您可以安装它,并从您的应用中删除`vendor/rails`目录。需要注意的是,从网站上下载的Rails版本并不是官方...

    NetBeans Ruby and Rails IDE with JRuby 2009

    总结来说,《NetBeans Ruby and Rails IDE with JRuby 2009》是一本详尽介绍了如何使用NetBeans作为Ruby和Rails开发工具的指南。它不仅覆盖了从安装到日常开发的所有方面,还深入探讨了如何利用NetBeans的各种高级...

    Rails Solutions Ruby on Rails Made Easy

    《Rails解决方案:Ruby on Rails变得轻松》是一本全面且易于理解的指南,适合从初学者到经验丰富的开发者的所有人。通过深入探讨Rails的特性和最佳实践,本书不仅教授了如何创建高效、美观的Web应用,还鼓励读者在...

    Pragmatic - Agile Web Development with Rails 2nd

    总体而言,《Pragmatic - 敏捷Web开发与Rails第二版》是一本详实的技术指南,不仅覆盖了Rails框架的基础知识,还深入探讨了敏捷开发方法论,以及如何将这些理论应用于实际项目中,对于希望深入了解Rails框架并提升...

    关于Rails登录和验证插件http_authentication restful-authentication

    7. **README.textile**:提供了插件的说明和使用指南,通常采用Textile或Markdown格式编写。 8. **TODO**:列出待完成的任务或功能,可能是开发者的备忘录。 9. **generators**:这个目录包含生成器脚本,用于自动...

    rails _sunspot 学习笔记

    ### Sunspot 安装与使用指南 #### 一、Sunspot简介 Sunspot 是一个用于 Ruby on Rails 的灵活且强大的全文检索框架。它基于 Solr 和 Lucene 构建,可以方便地集成到 Rails 应用中,为用户提供高效的搜索功能。 ##...

    Ruby 1.8.6 on Rails 2.1.0 Install.txt

    ### Ruby 1.8.6 与 Rails 2.1.0 的安装指南 #### 安装背景 本文档旨在指导用户如何在 Windows 操作系统上安装 Ruby 1.8.6 版本以及 Rails 2.1.0 版本,并确保其正确运行。这些版本虽然已经比较老旧,但在某些特定...

    应用Rails进行敏捷Web开发

    10. **社区和资源**:Rails拥有活跃的开发者社区,丰富的开源库(如Devise用于身份验证,Pundit用于授权,Bootstrap for Rails提供前端样式),以及各种教程和指南,如官方Rails Guide,帮助开发者解决问题和提升...

    Rails相关电子书汇总二

    - **工具使用**:"工具"标签可能意味着有额外的开发工具或库的介绍,这些可能是Rails开发中常用的如Gemfile、Bundler、Rails生成器、Rake任务等,掌握它们能提升开发效率。 总之,这个压缩包对于想要学习或提升Ruby...

    ruby on rails 教程

    - **Migration操作**:包括创建、执行和回滚迁移文件的基本命令,如`rails generate migration`, `rake db:migrate`, `rake db:rollback`等。 - **版本控制**:通过升级和降级版本的迁移,可以轻松地在不同的开发...

    The Rails 4 Way

    《The Rails 4 Way》不仅是一本技术书籍,更是一本深入探讨Rails 4框架内部工作机制的指南。通过学习本书,开发者不仅可以掌握Rails 4的基础知识,还能深入了解其背后的设计哲学和技术细节。无论是对于初学者还是...

    Rails2.2.2之windows环境搭建

    rake db:create ``` 这将创建Rails应用所需的数据库结构。然后,运行Rails的内置服务器,测试应用是否能正常启动: ``` rails server ``` 打开浏览器,访问`http://localhost:3000`,如果一切顺利,你应该能看到...

Global site tag (gtag.js) - Google Analytics