Ruby on rails Capsitrano部署配方:在部署文件列表和修改之后

Ruby on rails Capsitrano部署配方:在部署文件列表和修改之后,ruby-on-rails,capistrano,Ruby On Rails,Capistrano,我目前正在为Capistrano开发一个多阶段的配方,理想情况下,在部署之后,对所有css和js明智地使用yui压缩器 以下是我目前的想法: after "deploy", "deploy:cleanup", "minifier:compress" # Task to minify via Yui-compressor # Uses compressor bundled with application in #{application}/lib/yuicompressor namespace

我目前正在为Capistrano开发一个多阶段的配方,理想情况下,在部署之后,对所有css和js明智地使用yui压缩器

以下是我目前的想法:

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)
卡皮斯特拉诺一说到点子,我就开始了。 作为Ruby、Rails和Capistrano的新手,我知道出于某种原因,FileList不是一种常见的Capistrano方法,但我不知道用什么来代替它


感谢您的帮助。

您的任务在概念上是错误的,它将在本地系统(您正在部署的系统)上运行,因为您调用的是
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脚本更改代码,类似(未测试)


或者,如果您更喜欢使用ruby对其进行编程,您应该将代码移动到rake任务中(您可以在本地尝试并调试),然后使用Capistrano调用它:

您是说::rake::Filelist吗?
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