#ruby #ruby-on-rails-3 #rake #nokogiri #bundler
#ruby #ruby-on-rails-3 #грабли #nokogiri #пакет
Вопрос:
Nokogiri находится в моем файле gem. Bundle install возвращает ожидаемый результат:
Using nokogiri (1.4.4)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
При попытке выполнить db: create: all я получаю следующую ошибку:
rake db:create:all
Could not find nokogiri-1.4.4 in any of the sources
Если я протестирую в irb, я также получу ожидаемый результат.
irb(main):003:0> require "rubygems"
=> true
irb(main):004:0> require "nokogiri"
=> true
Я несколько раз удалял и устанавливал nokogiri вместе с его зависимостями.
Я использую:
Rails 3.0.6 Ruby 1.8.7
Буду признателен за любую помощь.
РЕДАКТИРОВАТЬ: 25.04.11, 15: 02 EDT
Для комментария ниже: Строка Gemfile для nokogiri является
gem "nokogiri", '1.4.4', :require => "nokogiri"
Комментарии:
1. Как выглядит ваш Gemfile?
2. Что у вас
GEM_HOME
установлено? Вполне возможно, что он установлен в каком-то необычном месте и Ruby не может его найти.Rakefile
используетGemfile
, но в вашемirb
примере этого нет.3. Как мне проверить, что также установлено в моем GEM_HOME?
Ответ №1:
Я провел тест с учетом вашего случая.
Мой Gemfile выглядит следующим образом:
gem "nokogiri", '1.4.4', :require => "nokogiri"
А затем rake db:migrate
все работало просто отлично
Комментарии:
1. Nokogiri уже был в gemfile, но я добавил сегмент «:require => «nokogiri»». Оба Rake db: migrate и Rake db:create: all по-прежнему возвращают: «Не удалось найти nokogiri-1.4.4 ни в одном из источников»
2. У меня это сработало. Я думаю, проблема, возможно, заключалась в том, что, хотя у меня был nokogiri gem, он был там только как зависимость от capybara или одного из других драгоценных камней, который был в
:test
блоке моего Gemfile, и поэтому он не появлялся в моей среде разработки.
Ответ №2:
Это может быть рискованно, но вы могли бы попробовать:
bundle install --no-deployment
Если вы находитесь в режиме развертывания, Rails будет искать ваши драгоценные камни в каталоге поставщика, а не в обычном месте установки. Это может вызвать ошибку такого рода.