Установка и использование rails_rcov на debian etch
Сразу говорю, тем у кого все работает, читать дальше нечего.
Тем, у кого возникают проблемы при установке, может оказаться полезным.
Итак, нам надо поставить gem rcov и плагин rails_rcov.
Ставим gem
sudo gem install rcov (по клику полный тектс)
$ sudo gem install rcov
Select which gem to install for your platform (i486-linux)
1. rcov 0.8.0.2 (ruby)
2. rcov 0.8.0.2 (mswin32)
3. rcov 0.8.0.1 (mswin32)
4. rcov 0.8.0.1 (ruby)
5. rcov 0.8.0.0 (mswin32)
6. rcov 0.8.0.0 (ruby)
7. rcov 0.7.0.1 (mswin32)
8. rcov 0.7.0.1 (ruby)
9. rcov 0.6.0.1 (ruby)
10. rcov 0.6.0.1 (mswin32)
11. rcov 0.5.0.1 (mswin32)
12. rcov 0.5.0.1 (ruby)
13. Cancel installation
> 1
Building native extensions. This could take a while...
rcovrt.c: In function ?Init_rcovrt’:
rcovrt.c:327: warning: implicit declaration of function ?Init_rcov_callsite’
callsite.c:18: warning: type defaults to ?int’ in declaration of ?caller_stack_len’
callsite.c: In function ?record_method_def_site’:
callsite.c:63: warning: unused variable ?hash’
callsite.c: In function ?Init_rcov_callsite’:
callsite.c:216: warning: unused variable ?id_script_lines__’
ruby extconf.rb install rcov
creating Makefile
make
gcc -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I. -fPIC -Wall -g -fno-strict-aliasing -O2 -fPIC -c rcovrt.c
gcc -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I. -fPIC -Wall -g -fno-strict-aliasing -O2 -fPIC -c callsite.c
gcc -shared -rdynamic -Wl,-export-dynamic -L"/usr/lib" -o rcovrt.so rcovrt.o callsite.o -lruby1.8 -lpthread -ldl -lcrypt -lm -lc
make install
/usr/bin/install -c -m 0755 rcovrt.so /var/lib/gems/1.8/gems/rcov-0.8.0.2/lib
make clean
Successfully installed rcov-0.8.0.2
Installing ri documentation for rcov-0.8.0.2...
Installing RDoc documentation for rcov-0.8.0.2...
Но это как ни странно не все:
$ rcov --version
bash: rcov: command not found
Смотрим, что там вообще поставилось:
$ cd /var/lib/gems/1.8/gems/rcov-0.8.0.2
$ ls
bin CHANGES InstalledFiles lib mingw-rbconfig.rb Rantfile rcov.vim README.emacs README.rake README.vim test
BLURB ext LEGAL LICENSE Rakefile rcov.el README.API README.en README.rant setup.rb THANKS
Вот этот setup.rb - это уже интересней. Запустим:
ruby setup.rb
$ ruby setup.rb
---> bin
<--- bin
---> lib
—> lib/rcov
<--- lib/rcov
<--- lib
---> ext
—> ext/rcovrt
/usr/bin/ruby1.8 /var/lib/gems/1.8/gems/rcov-0.8.0.2/ext/rcovrt/extconf.rb
creating Makefile
<--- ext/rcovrt
<--- ext
---> bin
updating shebang: rcov
<--- bin
---> lib
—> lib/rcov
<--- lib/rcov
<--- lib
---> ext
—> ext/rcovrt
make
gcc -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I/var/lib/gems/1.8/gems/rcov-0.8.0.2/ext/rcovrt -fPIC -Wall -g -fno-strict-aliasing -O2 -fPIC -c rcovrt.c
rcovrt.c: In function ?Init_rcovrt’:
rcovrt.c:327: warning: implicit declaration of function ?Init_rcov_callsite’
gcc -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I/var/lib/gems/1.8/gems/rcov-0.8.0.2/ext/rcovrt -fPIC -Wall -g -fno-strict-aliasing -O2 -fPIC -c callsite.c
callsite.c:18: warning: type defaults to ?int’ in declaration of ?caller_stack_len’
callsite.c: In function ?record_method_def_site’:
callsite.c:63: warning: unused variable ?hash’
callsite.c: In function ?Init_rcov_callsite’:
callsite.c:216: warning: unused variable ?id_script_lines__’
gcc -shared -rdynamic -Wl,-export-dynamic -L”/usr/lib” -o rcovrt.so rcovrt.o callsite.o -lruby1.8 -lpthread -ldl -lcrypt -lm -lc
<--- ext/rcovrt
<--- ext
rm -f InstalledFiles
---> bin
mkdir -p /usr/bin/
install rcov /usr/bin/
<--- bin
---> lib
mkdir -p /usr/local/lib/site_ruby/1.8/
install rcov.rb /usr/local/lib/site_ruby/1.8/
install rcovrt.so /usr/local/lib/site_ruby/1.8/
—> lib/rcov
mkdir -p /usr/local/lib/site_ruby/1.8/rcov
install report.rb /usr/local/lib/site_ruby/1.8/rcov
install rant.rb /usr/local/lib/site_ruby/1.8/rcov
install lowlevel.rb /usr/local/lib/site_ruby/1.8/rcov
install rcovtask.rb /usr/local/lib/site_ruby/1.8/rcov
install version.rb /usr/local/lib/site_ruby/1.8/rcov
<--- lib/rcov
<--- lib
---> ext
—> ext/rcovrt
mkdir -p /usr/local/lib/site_ruby/1.8/i486-linux/.
install rcovrt.so /usr/local/lib/site_ruby/1.8/i486-linux/.
<--- ext/rcovrt
<--- ext
Вот теперь заработало:
$ rcov --version
rcov 0.8.0 2007-02-28
Едем дальше - ставим плагин
$ ruby ./script/plugin install http://svn.codahale.com/rails_rcov
+ ./rails_rcov/MIT-LICENSE
+ ./rails_rcov/README
+ ./rails_rcov/tasks/rails_rcov.rake
Как известно, rails_rcov, добавляет нам некоторое колличество rake tasks
Все бы хорошо, но rake --tasks выдает ошибку:
undefined method `exclude' for nil:NilClass
/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake/clean.rb:19
Изыскания на эту тему в полном объеме вы можете прочитать здесь, нас же сейчас интересует что нужно сделать, чтоб оно просто заработало.
Во всем виноват файл /var/lib/gems/1.8/gems/rake-0.7.3/lib/rake/clean.rb, если у вас он находится в другом мосте, можете попробовать поискать его с помощью locate.
Итак в нем нам нужно заменить строку
CLEAN.clear_exclude.exclude { |fn|
на
CLEAN.clear_exclude
CLEAN.exclude { |fn|
--- gems/rake-0.7.3/lib/rake/clean.rb.orig 2007-04-24 12:49:15.000000000 +0100
+++ gems/rake-0.7.3/lib/rake/clean.rb 2007-04-24 13:00:38.000000000 +0100
@@ -16,7 +16,8 @@
require 'rake'
CLEAN = Rake::FileList["**/*~", "**/*.bak", "**/core"]
-CLEAN.clear_exclude.exclude { |fn|
+CLEAN.clear_exclude
+CLEAN.exclude { |fn|
fn.pathmap("%f") == 'core' && File.directory?(fn)
}
Ну теперь вроде все. Проверяем:
$ rake --tasks | grep rcov
rake test:functionals:clobber_rcov # Remove Rcov reports for functional tests
rake test:functionals:rcov # Run all functional tests with Rcov to measure coverage
rake test:integration:clobber_rcov # Remove Rcov reports for integration tests
rake test:integration:rcov # Run all integration tests with Rcov to measure coverage
rake test:plugins:clobber_rcov # Remove Rcov reports for plugin tests
rake test:plugins:rcov # Run all plugin tests with Rcov to measure coverage
rake test:recent:clobber_rcov # Remove Rcov reports for recent tests
rake test:recent:rcov # Run all recent tests with Rcov to measure coverage
rake test:test:clobber_rcov # Remove Rcov reports for test tests
rake test:test:rcov # Run all test tests with Rcov to measure coverage
rake test:uncommitted:clobber_rcov # Remove Rcov reports for uncommitted tests
rake test:uncommitted:rcov # Run all uncommitted tests with Rcov to measure coverage
rake test:units:clobber_rcov # Remove Rcov reports for unit tests
rake test:units:rcov # Run all unit tests with Rcov to measure coverage
Замечательно.
Да, и еще. Если у вас появляется такая ошибка:
rake aborted!
no such file to load -- rcov/rcovtask
то вы просто забыли установить gem.
Tags: ruby, rcov, rails_rcov, code coverage, testing, rake tasks, troubleshooting
Комментариев нет
RSS | Trackback uri