Рецепт развертывания Capsitrano: после распечатки и изменений файла развертывания - PullRequest
0 голосов
/ 27 июля 2011

В настоящее время я работаю над многоэтапным рецептом для Capistrano, который в идеале после развертывания будет разумно использовать компрессор yui для всех css и js.

Вот то, к чему я сейчас придумаю:

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, но не могу понять, чем его заменить.

Спасибо за помощь.

1 Ответ

1 голос
/ 27 июля 2011

Ваша задача концептуально неверна, она будет выполняться в локальной системе (той, из которой вы развертываете), потому что вы вызываете 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

Тем не менее, я изменю этот код с помощью сценариев оболочки, что-то вроде (не проверено)

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 ​​для его программирования, вы должны переместить код в задачу rake (которую вы можете попробовать и отладить локально), а затем вызвать ее с помощью Capistrano: Как запустить задачу rake из Capistrano

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...