开发者

Capsitrano deploy recipe : after deploy file listing and modifications

I'm currently working on a multi-stage recipe for Capistrano that would, ideally, after deploy, make wise use of the yui compressor for all css and js.

Here's what I currently came up to :

after "deploy", "deploy:cleanup", "minifier:compress"
# Task to minify via Yui-compressor
# Uses compressor bundled with application in #{application}/lib/yuicompressor
namespace :minifier do

def minify(files)
 files.each do |file|
   cmd = "java -jar lib/yuicompressor/build/yuicompressor-2.4.6.jar #{file} -o #{file}"
   puts cmd
   ret = system(cmd)
   raise "Minification failed for #{file}" if !ret
 end
end

desc "minify"
 task :compress do
 minify_js
 minify_css
end

desc "minify javascript"
 task :minify_js do
 minify(Filelist['public/js/**/*.js'])
end

desc "minify cs开发者_运维百科s"
 task :minify_css do
  minify(Filelist['public/css/**/*.css'])
 end
end

What's really puzzling me is the

uninitialized constant Capistrano::Configuration::Filelist (NameError)

I get as soon as Capistrano gets to the point. As a total newbie to Ruby, Rails, and Capistrano, I understand for some reason FileList isn't a common Capistrano method, but can't figure out what to replace it with.

Thanks for the help.


Your task is conceptually wrong, it will run on local system (the one from which you're deploying), because you're call system, you should use the run method which run commands remotely.

def minify(files)
 files.each do |file|
   cmd = "java -jar lib/yuicompressor/build/yuicompressor-2.4.6.jar #{file} -o #{file}"
   puts cmd
   ret = system(cmd) # *** SYSTEM RUN LOCAL COMMANDS ***
   raise "Minification failed for #{file}" if !ret
 end
end

That said, I will change that code with shell scripting, something like (untested)

task :minify
  cmd = "java -jar lib/yuicompressor/build/yuicompressor-2.4.6.jar"
  run "find #{current_path}/public/css/ -name '*.css' -print0 | xargs -0 -I file #{cmd} file -o file"
  run "find #{current_path}/public/js/ -name '*.js' -print0 | xargs -0 -I file #{cmd} file -o file"
end

or if you prefer to use ruby to program it, you should move the code into a rake task (which you can try and debug locally) and then invoke it with Capistrano: How do I run a rake task from Capistrano?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜