2011-07-27 29 views
0

我目前正在研究Capistrano的多階段配方,理想情況下,部署之後,明智地使用yui壓縮器來處理所有css和js。Capsitrano部署食譜:在部署文件列表和修改之後

這是我目前走過來:

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 css" 
task :minify_css do 
    minify(Filelist['public/css/**/*.css']) 
end 
end 

什麼是真正的我百思不得其解的是

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

我只要Capistrano的到達點得到。 作爲Ruby,Rails和Capistrano的總新手,我理解FileList不是普通的Capistrano方法,但無法弄清楚用什麼來代替它。

感謝您的幫助。

+0

您的意思是:: Rake :: Filelist? – jimworm

回答

1

你的任務是概念錯誤,它會在本地系統(從你要部署的一種)運行,因爲你叫system,你應該使用run方法,遠程運行命令。

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 

這就是說,我會改變與shell腳本,像(未經測試)

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 

,或者如果你喜歡使用Ruby編程,你應該移動代碼的代碼放到一個耙子任務(您可以嘗試本地調試),然後用Capistrano調用它:How do I run a rake task from Capistrano?