Установка и использование 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|

Посмотреть diff целиком


--- 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: , , , , , ,


Дополнительная информация