Тесты Rake: Ошибка загрузки Gem - PullRequest
3 голосов
/ 12 июля 2011

Я определил простую задачу rake для запуска моих тестов ruby, но проблема в том, что rake не загружает гем с версией, определенной в Gemfile. Получается Gem::LoadError. Есть ли способ сообщить рейку, какую версию гема использовать?

Вот драгоценные камни, установленные в моей системе:

addressable (2.2.6, 2.2.4)
bundler (1.0.15)
libarchive (0.1.2)
nokogiri (1.5.0)
rake (0.9.2, 0.8.7)
rdf (0.3.3)

А это мой GemFile:

source :rubygems

gem 'nokogiri', '1.5.0'
gem 'rdf', '0.3.3'
gem 'addressable', '2.2.4'
gem 'libarchive', '0.1.2'

Вот грабли:

require 'rake/testtask'

task :default => [:test]

desc "Run basic tests"
Rake::TestTask.new do |test|
  test.libs << "test"
  test.test_files = Dir["test/test_*.rb"]
  test.verbose = true
end

И это исключение, которое я получаю:

/Users/dummy/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1612:in `raise_if_conflicts': Unable to activate rdf-0.3.3, because addressable-2.2.6 conflicts with addressable (= 2.2.4) (Gem::LoadError)

Я могу решить проблему, удалив addressable 2.2.6, но мне нужна никогда не версия этого гема для другого проекта.

Другим решением может быть использование rvm gemsets. Но разве просто невозможно запустить rake с заданной спецификацией Gemfile?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Я думаю, что предложение Брайана должно сработать:

bundle exec rake <task>

Кроме того, разделение наборов гемов, используя, например, наборы гемов rvm, было бы другим вариантом ... не должно быть необходимости удалять какие-либо версии гемов.

Другим методом разбиения будет установка всех гемов внутри каталога проекта (в отличие от установки их в качестве системных гемов), используя что-то похожее на:

bundle install --path=.bundler

См. http://gembundler.com/man/bundle-install.1.html для получения дополнительной информации. Обратите внимание, что это последнее решение все еще требует подхода bundle exec, чтобы избежать конфликтов с драгоценными камнями.

Надеюсь, это поможет,

Peter

0 голосов
/ 14 июля 2011

с использованием наборов гемов RVM (http://beginrescueend.com/gemsets/basics/), вероятно, лучший способ справиться с конфликтами версий гемов между проектами. Для моего сценария это работает ...

...