免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2759 | 回复: 0
打印 上一主题 下一主题

使用Rails的template避免重复劳动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-28 10:42 |只看该作者 |倒序浏览
转:darkbaby123


使用Rails的template避免重复劳动





说起来这个template功能在 Rails 2 时代就已经存在了。所以这并不算什么新鲜玩意。可惜我当时没关注,后来更是忘得精光。今天看了一篇别人的博客才发现这就是我一直想找的东西。


你是否觉得初始化每个Rails项目时都要做一些重复的工作?比如在Gemfile中加入常用的gem,用jQuery替换Prototype,跑一些generator……等等。Rails template 可以让你用代码完成这些重复工作。


说明:本人开发环境是Rails 3.0.4,所以以下的命令都是Rails 3的。


比如你把自己要做的事情用DSL写在一个文件里(内容随便写的):


Ruby代码
  1. # File path   
  2. # ~/rails_template.rb   
  3.   
  4. gem 'jquery-rails'  
  5. gem 'rspec', :group => :test  
  6.   
  7. run "bundle install"  
  8.   
  9. generate :scaffold, "User name:string"  
  10. rake "db:migrate"  
复制代码
代码意图很清晰,不会有哪个搞Rails的看不懂吧……

然后在新建一个项目(就叫your_app吧)时,用 -m 参数引用这个文件路径:


Shell代码
  1. rails new your_app -JT -m ~/rails_template.rb
复制代码
Rails在初始化项目完成后,就会执行脚本中的内容。是不是很酷呢?


其实Rails template只是提供一套平易近人的API来让你描述一些日常工作。而且它并不仅仅只能在项目初始化的时候使用,也可以对一个已经存在的Rails项目使用。你只需要执行rails:template任务并把文件路径传给LOCATION参数即可:


Shell代码
  1. rake rails:template LOCATION=~/rails_template.rb
复制代码
这样一来你完全可以把日常任务放到各种不同的Rails template里面,根据不同的情况使用。或者给一个Rails项目应用多个不同的template。Don't Repeat Yourself !


按照俺的习惯,本文同样只是介绍这么个玩意给没用过的developers。毕竟我也是在学习,而且没必要重复别人的东西,不是么?(尤其是当别人已经写的很好时)。 如果想看更详细的东西,你可以在下面两篇文章中找到答案(推荐先看第一篇):


我的Rails 3 App Template (+jQuery + RSpec + Watchr)

这篇文章可以算是Rails template的“最佳实践”了,里面目录结构的设计值得学习。而且从template文件中你可以找到大部分你想要的API,比如替换config/application.rb配置文件中的某一行,把新的配置增量写入一个文件……而且这些API在Rails API中还查不到……如果谁找到了,可以告诉我一声。


Rails templates

Rails template提供的一些API的介绍,比 Rails API 上的要详细一点点。


最后贴一份我自己的Rails template,仿造第一篇文章写的。我用它来初始化一些测试项目:


这是Rails template


Ruby代码
  1. # File path:
  2. # ~/shared_scripts/rails_template/rails3.rb
  3. #
  4. # How to use:
  5. #   rails new your_app -TJ -m ~/shared_scripts/rails_template/rails3.rb

  6. # Use customized Gemfile instead of the auto-generated Gemfile
  7. # Customized Gemfile is in ~/shared_scripts/rails_template/
  8. run "mv Gemfile Gemfile.old"
  9. file 'Gemfile', File.read("#{File.dirname(rails_template)}/Gemfile")

  10. run "bundle install"

  11. generate 'rspec:install'
  12. generate 'jquery:install'
  13. # For coffee script
  14. generate 'barista:install'

  15. # Create dir for coffee script and sass
  16. run "mkdir app/coffeescripts"
  17. run "mkdir public/stylesheets/sass"

  18. # Setting jquery
  19. gsub_file 'config/application.rb', /(config.action_view.javascript_expansions.*)/,
  20.                                    "config.action_view.javascript_expansions[:defaults] = %w(jquery rails)"

  21. # Keep tmp and log directory
  22. run "touch tmp/.gitkeep"
  23. run "touch log/.gitkeep"

  24. # Create scaffold if needed
  25. if yes?("Do you want to generate a scaffold ?")
  26.   params = ask("Enter scaffold: ")
  27.   generate :scaffold, params
  28.   rake "db:migrate"
  29. end
复制代码
这是Gemfile



Ruby代码
  1. # File path:   
  2. # ~/shared_scripts/rails_template/Gemfile   
  3.   
  4. source 'http://rubygems.org'  
  5.   
  6. gem 'rails', '3.0.4'  
  7. # Bundle edge Rails instead:   
  8. # gem 'rails', :git => 'git://github.com/rails/rails.git'   
  9.   
  10. gem 'sqlite3'  
  11. # PostgreSQL adapter   
  12. # gem 'pg'   
  13.   
  14. gem 'jquery-rails'  
  15. gem 'haml'  
  16. gem 'haml-rails'  
  17. gem 'json'  
  18. gem 'barista'  
  19.   
  20. # Must apply rspec in development env, or the generators will generate test_unit files instead of rspec ones   
  21. group :development, :test do  
  22.   gem 'rspec'  
  23.   gem 'rspec-rails'  
  24. end  
  25.   
  26. # AR finder   
  27. # gem 'meta_where'   
  28.   
  29. # Paginator   
  30. # gem 'kaminari'   
  31.   
  32. # HTML5 offline app   
  33. # gem 'rack-offline'  
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP