«Недопустимые gemspec» сообщения во время «установки пакета» фабричной девушки (rails 3.1 и ruby ​​1.9.2p290) - PullRequest
3 голосов
/ 29 марта 2012

Примечание:
Я задал этот вопрос, когда получил неожиданные сообщения при выполнении bundle install с гемом factory_girl с использованием Ubuntu 11.10.Будучи нубом, я имел ... и до сих пор не знаю ... что происходит.Обновление ниже пытается обрисовать в общих чертах, что я сделал, чтобы в конечном счете избавиться от сообщений.Я оставляю этот вопрос с чуть более подходящей строкой заголовка на тот случай, если она может быть кому-то полезна.

Я смотрю на README.md Factory Girl и вижу:

    Install
      gem install factory_girl
    or add the following line to Gemfile:
      gem 'factory_girl'
    and run bundle install from your shell.

    Supported Ruby versions
    The Factory Girl 3.x series supports Ruby 1.9.x.
    For older versions of Ruby, please use the Factory Girl 2.x series.

Поскольку я сейчас использую
Rails 3.1.0 и
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

, я добавляю gem 'factory_girl' в свой Gemfile и делаю bundle update.

Но затем, продолжая, я открываю файл Getting Started.md и читаю

    Update Your Gemfile
    If you're using Rails, you'll need to change
    the required version of factory_girl_rails:
      gem "factory_girl_rails", "~> 2.0"
    If you're not using Rails, you'll just have to
    change the required version of factory_girl:
      gem "factory_girl", "~> 3.0"
    Once your Gemfile is updated, you'll want to update your bundle.

ОК, хорошо.Я удаляю gem 'factory_girl' из своего Gemfile и вместо этого добавляю
gem "factory_girl_rails", "~> 2.0".
, а затем снова пытаюсь bundle update.На этот раз без радости.

    $bundle install
    Invalid gemspec in [/usr/local/lib/ruby/gems/1.9.1/specifications/
      factory_girl_rails-2.0.0.gemspec]: Illformed requirement
      ["# 3.0.7"]
    Invalid gemspec in [/usr/local/lib/ruby/gems/1.9.1/specifications/
      factory_girl_rails-2.0.0.gemspec]: Illformed requirement 
      ["# 3.0.7"]
    Fetching source index for http://rubygems.org/
    Using rake (0.9.2.2) 
    Using ZenTest (4.7.0) 
    ... a bunch of "Using" lines omitted for brevity ...
    Using deepopenstruct (0.1.2) 
    Using factory_girl (3.0.0) 
    Installing factory_girl_rails (2.0.0) Invalid gemspec in
      [/usr/local/lib/ruby/gems/1.9.1/specifications/factory_girl_rails-2.0.0.gemspec]:
      Illformed requirement ["# 3.0.7"]  
    Using haml (3.1.4) 
    Using jquery-rails (1.0.19) 
    ... a bunch of "Using" lines omitted for brevity ...
    Using uglifier (1.2.4) 
    Your bundle is complete! Use `bundle show [gemname]` to see where a
      bundled gem is installed.

Так что теперь я задаюсь вопросом (1) почему, следуя инструкциям в README, очевидно, не работает и (2) что я должен сделать с моим Gemfile, чтобы получитьFactory Girl улыбается и продуктивно?


Обновление

Хотя получение сообщений об ошибках, которые я не понимаю, вызывает разочарование, избавление от них, но не совсем уверенный Что Я сделал, чтобы "исправить" вещи также менее особенным.О, хорошо.

Честно говоря, хотя я и использовал пакет, я не знал, в чем разница между gem, rvm и bundle, и я не понимал, что такое каждая командадолжен делать.Я думаю, что эта запись в блоге, которую я нашел через Google, несколько помогла в этом:
RVM и Bundler за пять секунд

Думая, что rvm и bundle должны автоматизировать управление группойдрагоценные камни, в то время как gem просто управляет драгоценными камнями, я посмотрел на команды драгоценных камней.

Я пытался gem check, который IIRC ничего не сделал.Затем я попытался gem cleanup, который вернулся с длинным списком драгоценных камней, которые он хотел удалить.Полагая, что я мог (вероятно) вернуться туда, где мне нужно было, используя bundle install, я позволил ему выполнить деинсталляцию.(Хотя мне пришлось использовать sudo gem cleanup, потому что у меня не было разрешения на запись в некоторые из задействованных каталогов).

После этого gem check и gem cleanup вернулись чистыми.Тем не менее, bundle check вернуло:

The following gems are missing
 * activesupport (3.1.0)
 * activemodel (3.1.0)
 * rack-cache (1.0.3)
 * actionpack (3.1.0)
Install missing gems with `bundle install`

Итак, я выполнил оба bundle install с последующим (почему нет?) bundle update.Это установило камни, перечисленные выше, без проблем.В частности, на этот раз я не получил Invalid gemspec или любые другие сообщения об ошибках.(Ура!)

Конечно, bundle update ничего не сделал, поскольку, честно говоря, я ожидал этого.

Так что, хотя я до сих пор не уверен, что произошло, первоначальная причинамой вопрос был своего рода, сорта решен.

Я оставлю этот вопрос без ответа на неделю или около того, чтобы посмотреть, не хочет ли кто-нибудь еще оставить какие-либо комментарии.После этого, если никто не даст более информативный ответ, я думаю, я просто сам "отвечу" на этот вопрос, чтобы закрыть его.

Спасибо всем, кто помог мне подтолкнуть к чистому набору драгоценных камней.

Ответы [ 4 ]

7 голосов
/ 17 апреля 2012

Я столкнулся с почти такой же проблемой, когда пытался установить гем factory_girl_rails, и смог решить его, удалив файл спецификации с ошибками и затем запустив

gem update --system

с последующим

комплектом установки

1 голос
/ 02 октября 2012

С ruby ​​1.8.7 и factory_girl_rails вы можете закрепить версию factory_girl до 2.6 и позволить упаковщику сделать все остальное.

gem 'factory_girl', '~> 2.6'
gem "factory_girl_rails"

Сработало для меня.

1 голос
/ 29 августа 2012

По-видимому, в gemspec возникли некоторые ошибки. Откройте его и удалите дерьмовые биты!

лично я сделал это с помощью vim так:

vim ~/.rvm/gems/ruby-1.8.7-p357/specifications/factory_girl_rails-1.7.0.gemspec
:%s/".*YAML.*\ /"/
:wq

затем повторно связать

и проблема должна быть решена!

0 голосов
/ 09 апреля 2012

Я не вижу смысла держать этот вопрос открытым. Хотя я никогда не понимал, почему я получаю Invalid gemspec, шаги, которые перечислены в моем обновлении моего вопроса, «решили» эту «проблему».

Было бы неплохо, если бы был способ просто закрыть вопрос как " Ответ больше не является для меня приоритетом " или даже просто " Я перешел на ». Но нет. Этот "ответ" по крайней мере исключит этот вопрос из списка вещей, которые еще предстоит рассмотреть.

...