rails 3出来以后,大家都开始尝试里面的各种功能,我早先也试过其中的项目模板功能,感觉不错,在github上放了一个地址用来记录模板,地址在: https://github.com/fsword/rails_templates ,今天拿这几个模板在windows上测试了一下,发现一些问题,这里记录一下
先说使用,模板使用起来只要一行代码就行:
$ rails new your_app -m https://github.com/fsword/rails_templates/raw/master/jruby_template0.rb
你也可以下载到本地再用:
$ rails new your_app -m ./jruby_template0.rb
是不是很简单?那么,它能做什么呢,我用的结果是,它大致上可以做——任何事
没错,从项目的gem依赖、数据库驱动配置到编写主要模型类、公共页面甚至特殊页面等等等等,只要你愿意,都可以写在这里面,因为它就是一个ruby代码脚本,只不过是用 rails 命令建立项目后进行了后处理而已
当然,简单归简单,真要把所有逻辑写进去还是很麻烦的,这个工具主要还是用来做项目骨架
这里面可以调用哪些常见的api呢,我没有在网上找到如何编写模板的文档,所以想了一个笨办法——写个这样的模板:
# filename : x.rb
self.methods.sort.each{|m| p m}
这样,执行一下 rails new your_app -m x.rb,我们就能得到可以调用的api了。
大致上,常见的api包括:
- remove_file: 删除指定文件,这个api可以方便的跨平台使用
- remove_dir: 删除指定目录,这个api可以方便的跨平台使用
- say: 在标准输出打印一段文字
- gem: 在Gemfile中添加一个依赖包
- gsub_file: 替换指定文件的内容,有了它,就不必费劲的写 File.open f.write 了
- run: 执行一个外部命令
- application: 参数是一个闭包,在application.rb文件中添加闭包中的内容
- generate: 调用 rails generator
- route: 添加 route 记录
- git: 执行 git 操作,例如: init, add, commit 等等
- rake: 执行 rake 任务
这些命令中,需要注意的是 run 命令,它与操作系统环境有关,如果编写这样的代码:
run 'rm README'
那么只能在非windows环境下运行了
另外还有一个命令:copy_file,但是它的相对目录不是所创建的rails项目,而我还没有找到代替方法,暂时不推荐了
还有一个很头疼的问题是关于 https 的,受到大中华局域网的影响,git上的资源不是很稳定,所以需要重试,我改了一下代码,添加了一个函数
def try_to n
if block_given?
n.times{|i|
begin
return yield
rescue
p "failed #{i} times"
sleep 1
end
}
nil
end
end
def try_get url, file=nil
try_to(3)do get url,file end
end
然后,把
get "https://github.com/fsword/rails_templates/raw/master/resource/gitignore", ".gitignore"
改为
try_get "https://github.com/fsword/rails_templates/raw/master/resource/gitignore", ".gitignore"
即可
Ok, have fun!