2012-03-12 10 views
20

Wiem, że to pytanie zostało zadane w jednej lub drugiej formie wcześniej, ale nadal nie mogę znaleźć odpowiedniego rozwiązania.Ruby on Rails - błąd podczas uruchamiania ogórka: już aktywowałeś activesupport 3.2.1, ale twój Gemfile wymaga activesupport 3.1.0.

Biorę kurs SaaS oferowane w trybie online, a kod jest bezpośrednio sklonowany z https://github.com/saasbook/hw3_rottenpotatoes

Kiedy biegnę ogórka z wiersza poleceń

Using the default profile... 
You have already activated activesupport 3.2.1, but your Gemfile requires activesupport 3.1.0. Using bundle exec may solve this. (Gem::LoadError) 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:31:in `block in setup' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:17:in `setup' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler.rb:110:in `setup' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/setup.rb:7:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/config/boot.rb:6:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/config/application.rb:1:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/config/environment.rb:2:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-rails-1.3.0/lib/cucumber/rails.rb:7:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/features/support/env.rb:7:in `<top (required)>' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/rb_support/rb_language.rb:129:in `load' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/rb_support/rb_language.rb:129:in `load_code_file' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:171:in `load_file' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:83:in `block in load_files!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:82:in `each' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:82:in `load_files!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime.rb:175:in `load_step_definitions' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime.rb:40:in `run!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/cli/main.rb:43:in `execute!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/cli/main.rb:20:in `execute' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/bin/cucumber:14:in `<top (required)>' 
/Users/chemin/.rvm/gems/[email protected]/bin/cucumber:19:in `load' 
/Users/chemin/.rvm/gems/[email protected]/bin/cucumber:19:in `<main>' 

po uruchomieniu pakiet zainstalować wersję mam jeszcze brzydsze wiadomość

Could not find rack-cache (~> 1.1) amongst [actionmailer-3.1.0, actionpack-3.1.0, activemodel-3.1.0, activerecord-3.1.0, activeresource-3.1.0, activesupport-3.1.0, addressable-2.2.7, archive-tar-minitar-0.5.2, arel-2.2.1, bcrypt-ruby-3.0.1, builder-3.0.0, capybara-1.1.2, childprocess-0.3.1, coffee-rails-3.1.1, coffee-script-2.2.0, coffee-script-source-1.2.0, columnize-0.3.6, cucumber-1.1.8, cucumber-rails-1.3.0, cucumber-rails-training-wheels-1.0.0, database_cleaner-0.7.1, diff-lcs-1.1.3, erubis-2.7.0, execjs-1.3.0, ffi-1.0.11, gherkin-2.8.0, haml-3.1.4, hike-1.2.1, i18n-0.6.0, jquery-rails-1.0.19, json-1.6.5, json_pure-1.6.5, launchy-2.0.5, libv8-3.3.10.4-x86_64-darwin-10, linecache19-0.5.12, mail-2.3.0, mime-types-1.17.2, multi_json-1.1.0, nokogiri-1.5.0, polyglot-0.3.3, rack-1.3.6, rack-cache-1.0.3, rack-mount-0.8.3, rack-ssl-1.3.2, rack-test-0.6.1, rails-3.1.0, railties-3.1.0, rake-0.9.2.2, rdoc-3.12, ruby-debug-base19-0.11.25, ruby-debug19-0.11.6, ruby_core_source-0.1.5, rubyzip-0.9.6.1, sass-3.1.15, sass-rails-3.1.5, selenium-webdriver-2.13.0, sprockets-2.0.3, sqlite3-1.3.5, term-ansicolor-1.0.7, therubyracer-0.9.10, thor-0.14.6, tilt-1.3.3, treetop-1.4.10, tzinfo-0.3.31, uglifier-1.2.3, xpath-0.1.4] (Gem::LoadError) 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:451:in `block in find_in_unresolved' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:451:in `map' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:451:in `find_in_unresolved' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:43:in `require' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/dsl.rb:1:in `<top (required)>' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/definition.rb:17:in `build' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler.rb:138:in `definition' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler.rb:126:in `load' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler.rb:110:in `setup' 
/Users/chemin/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/setup.rb:7:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/config/boot.rb:6:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/config/application.rb:1:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/config/environment.rb:2:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-rails-1.3.0/lib/cucumber/rails.rb:7:in `<top (required)>' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require' 
/Users/chemin/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
/Users/chemin/rails_projects/saas/hw3_rottenpotatoes/features/support/env.rb:7:in `<top (required)>' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/rb_support/rb_language.rb:129:in `load' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/rb_support/rb_language.rb:129:in `load_code_file' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:171:in `load_file' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:83:in `block in load_files!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:82:in `each' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime/support_code.rb:82:in `load_files!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime.rb:175:in `load_step_definitions' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/runtime.rb:40:in `run!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/cli/main.rb:43:in `execute!' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/lib/cucumber/cli/main.rb:20:in `execute' 
/Users/chemin/.rvm/gems/[email protected]/gems/cucumber-1.1.9/bin/cucumber:14:in `<top (required)>' 
/Users/chemin/.rvm/gems/[email protected]/bin/cucumber:19:in `load' 
/Users/chemin/.rvm/gems/[email protected]/bin/cucumber:19:in `<main>' 

Odpowiedz

39

jest kilka rozwiązań, z których najłatwiej byłoby spróbować uruchomić bundle exec cucumber najpierw i zobacz, czy to rozwiązuje twój problem.

Jeśli to nie zadziała, usunąć rails3tutorial gemset i odtworzyć go ponownie:

rvm gemset delete rails3tutorial 
rvm [email protected] --create 

Następnie uruchom bundle i miejmy nadzieję, że zainstalować swoje skarby dla Ciebie. Śledź to z bundle exec cucumber (prawie zawsze uruchamiam moje specyfikacje i gryzaki używając bundle exec, aby nie próbować przypadkowo ładować stare klejnoty).

Mam nadzieję, że to zadziała!

UPDATE: Wyjaśniając bundle exec trochę więcej

bundle exec jest polecenie, które Bundler wyposażony która prowadzi innej komendy w kontekście swojej Gemfile. W tym przypadku zasadniczo mówisz, że chcesz uruchomić polecenie cucumber, ale tylko z klejnotami z Gemfile, a nie ze wszystkimi dostępnymi obecnie klejnotami.

Na przykład, jeśli wcześniej zainstalowano activesupport 3.2.1, a Twój Gemfile prosi o activesupport 3.1.0. Kiedy tak się dzieje, uważam, że polecenie ogórka samo wciąga "activesupport" (może poprzez wywołanie require 'cucumber/rails' w env.rb), które chwyta dowolną losową wersję activesupport, którą może (powiedzmy, że pobiera 3.2.1) z dostępnych klejnotów. Po tym, postanawia załadować swoje środowisko szyn, aby uruchomić swoje funkcje. Kiedy zaczyna ładować twoją rzeczywistą aplikację, kod wygląda na twój Gemfile.lock i widzi, że to, czego naprawdę chcesz, to activesupport 3.1.0, ale nie może załadować starej wersji na nową wersję, więc zawiesza się z błędem James Lin wklejony.

To dlatego, jeśli używasz rvm, dobrze jest zachować oddzielne zestawy gemów dla oddzielnych projektów i usuwać/ponownie tworzyć zestawy gemów, jeśli aktualizujesz swoje klejnoty w tym projekcie, więc nie musisz Zachowaj stare wersje klejnotów. Alternatywnie, bundle exec rozwiązuje również 99% problemów. Jeśli nie używasz rvm i masz wiele projektów, prawdopodobnie masz wiele różnych wersji wielu różnych klejnotów i zawsze powinieneś używać bundle exec, aby wykonywać takie czynności, jak wykonywanie zadań rake, uruchamianie funkcji cucumer i innych testów jednostkowych, itp.

+1

Dzięki uruchomieniu pakietu ogórek exec pracował! –

+0

Czy możesz wyjaśnić, jaka jest różnica między "ogórkiem" a "paczką ogórków exec"? – coelhudo

+0

@coelhudo Umieszczam wyjaśnienie na końcu mojej odpowiedzi :) – nzifnab

3

Lub możesz zrobić bundle update, aby upewnić się, że wszystkie twoje wtyczki gem są najnowszą wersją i zaktualizuje twój Gemfile.lock, więc te dwa będą spójne.

Chyba różnicę między bundle exec i bundle update jest, czy chcesz pakiet dostarczyć wersję aplikacja z prośbą o aktualizację lub aplikację gemfile tak, że aplikacja nie będzie nalegać nieświeży wersję gem po zainstalowaniu nowszych wersji i spowodować problem, ponieważ plik gem.

Ponieważ gdy dochodzi do konfliktu wersji, dobrym pomysłem jest upewnienie się, że zainstalowane w twoim systemie środowisko jest zgodne z Twoją aplikacją Gemfile lub zablokować plik, ponieważ nie chcesz, aby próbowały używać starej wersji klejnotu, gdy dostępna jest nowsza wersja, chyba że chcesz zamrozić swój system klejnotów za pomocą rvm lub podobnego na poziomie aplikacji, ale znowu, kiedy rozpowszechniasz aplikację Ruby, może to powodować problemy na innych komputerach.

Ostatecznie, ponieważ trzeba rozpowszechniać swoją aplikację, chyba że nowsza wersja pliku gem nie działa z istniejącą aplikacją, myślę, że nie powinna nalegać na nieaktualną, znaną działającą wersję, chyba że zawsze chcesz zachować to po bezpiecznej stronie, która jest słusznym argumentem.

Powiązane problemy