我该如何改进我的Rakefile(部署)

问题描述:

我在写我的第一个Rakefile。我在文档中看到的第一件事是"there is no special format for a Rakefile"和“Rakefile中没有特殊的语法”。我该如何改进我的Rakefile(部署)

好了,我只好拿出我自己的东西,但我可以看到至少有两个问题,我的生物:

1)我需要创建多个文件夹,其中五。 6 directory任务的顺序看起来有点奇怪。 deploy任务中的5个依赖列表看起来更奇怪。我可以将它缩小到一行吗?

2)我需要重复我的目录名文字两次 - 当我定义他们的部署路径和当我复制内容。如果不引入5个更多变量,我可以避免这种情况吗

在Java Ant中,我将创建一个包含所有名称文字的属性文件 - 我可以使用Rake做到这一点吗?

这是我的本钱:

WEBAPPSDIR = '/var/webapps/' 
WEBAPPNAME = 'foo.local' 
WEBAPPDIR = File.join(WEBAPPSDIR, WEBAPPNAME) 
VIEWSDIR = File.join(WEBAPPDIR, 'views') 
PUBLICDIR = File.join(WEBAPPDIR, 'public') 
CSSDIR = File.join(PUBLICDIR, 'css') 
IMAGESDIR = File.join(PUBLICDIR, 'images') 
TMPDIR = File.join(WEBAPPDIR, 'tmp') 
HTMLDIR = File.join(PUBLICDIR, 'html') 

directory VIEWSDIR 
directory CSSDIR 
directory HTMLDIR 
directory IMAGESDIR 
directory TMPDIR 

desc 'Deploy to webapps dir' 
task :deploy => [VIEWSDIR, CSSDIR, IMAGESDIR, TMPDIR, HTMLDIR] do 
    cp 'config.ru', WEBAPPDIR 
    Dir.glob('*.rb') {|f| cp f, WEBAPPDIR} 
    Dir.glob('views/*.{mab,str}') {|f| cp f, VIEWSDIR} 
    Dir.glob('css/*.css') {|f| cp f, CSSDIR} 
    Dir.glob('images/*.{png,jpg,gif}') {|f| cp f, IMAGESDIR} 
    Dir.glob('html/*.html') {|f| cp f, VIEWSDIR} 
end 

desc 'Cleans webapp dir' 
task :clean do 
    rm_r WEBAPPDIR, {force: true} 
end 

其他的想法/链接/例子也欢迎。

这并不能真正回答你的问题 - 但你为什么不使用capistrano?如果您还不知道它,它是一个经常用于处理部署的红宝石工具顺利

+0

将看看谢谢!这是你使用自己的东西吗? – 2012-02-17 19:42:20

+0

我个人使用它,是的,我们在我的公司使用它,并且几个“大名”(GitHub是我头顶的那个)也在使用它。它在ruby/rails社区中非常主流 – ksol 2012-02-17 19:43:39

+0

它说它用于从SCM部署到(远程)服务器,但它是否可以从本地文件系统部署到本地服务器(仅复制)? – 2012-02-17 19:52:18