2015-03-23 9 views
13

Jestem stoi błąd gdy uruchamiam jakąkolwiek migrację jako:nie można uruchomić po aktualizacji wiosennej migracji w Rails

[email protected]:~/Desktop/Projects/invoicemanagement$ rails g migration RemoveDescriptionOfGoodsFromInvoiceDetails description_of_goods:string 
Warning: You're using Rubygems 1.8.23 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance. 
/var/lib/gems/1.9.1/gems/bundler-1.9.0/lib/bundler/runtime.rb:34:in `block in setup': You have already activated spring 1.3.3, but your Gemfile requires spring 1.3.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError) 
    from /var/lib/gems/1.9.1/gems/bundler-1.9.0/lib/bundler/runtime.rb:19:in `setup' 

    ** 11 stack trace lines skipped ** 

    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 

Więc niektóre googlowania biegnę pakiet aktualizacji sprężynę, które rozwiązać powyższy błąd, i jestem w stanie usunąć/dodać migracje. Ponownie, jeśli run rake db: migrować, otrzymuję błąd jako:

rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

undefined method `to_sym' for nil:NilClass/var/lib/gems/1.9.1/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/schema_definitions.rb:216:in `column' 

    ** 33 stack trace lines skipped ** 

/var/lib/gems/1.9.1/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>' 
Tasks: TOP => db:migrate 

Proszę mi pomóc.

Odpowiedz

28

Po uruchomieniu bundle update i aktualizowanie Spring, ja otrzymuję następujący błąd podczas uruchamiania konsoli:

There is a version mismatch between the spring client and the server. 
You should restart the server and make sure to use the same version. 

CLIENT: 1.3.4, SERVER: 1.3.3 

I przestrzegać zaleceń zawartych w this Github issue i pobiegł:

spring stop 

ta stała się kwestią dla mnie.

+0

W tym numerze wymieniono inne pomocne sugestie. +1. –

1

Dzieje się tak dlatego, że jeden z zależnościami w projekcie jest starsza wersja wiosnę niż jest zainstalowany w systemie:

You have already activated spring 1.3.3, but your Gemfile requires spring 1.3.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError) 

Prawidłowe sposobem radzenia sobie z tym jest dołączana bundle exec do polecenia, jak pojawia się komunikat o błędzie. Patrz poniżej:

Podczas uruchamiania pliku wykonywalnego należy ZAWSZE użyć pakietu exec [polecenie]. Cytowanie z dokumentacji programu pakującego: W niektórych przypadkach uruchamianie plików wykonywalnych bez pakietu exec może działać, jeśli plik wykonywalny zostanie zainstalowany w systemie i nie będzie pobierał żadnych klejnotów, które kolidują z pakietem. Jest to jednak niewiarygodne i jest źródłem znacznego bólu.

http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

Running bundle update może powodować inne problemy. Jeśli drugi błąd nadal występuje, możesz powrócić do starej wersji Gemfile z kontrolki wersji.

+3

Próbowałem już z wiązki exec, ale to mi nie pomogło. –

+0

Czy otrzymujesz pierwszy lub drugi błąd. Druga z nich jest spowodowana "aktualizacją pakietu" i nie zostanie naprawiona przy użyciu 'bundle exec'. Aby rozwiązać ten drugi problem, musisz przywrócić kod do punktu, zanim zrobiłeś 'bundle update' z kontrolki wersji. – Drenmi

+0

Robię to samo, kiedy ponownie wprowadzam polecenie dodawania migracji, otrzymuję ten problem: 'Istnieje nieścisłość wersji między klientem źródłowym a serwerem. Powinieneś zrestartować serwer i upewnić się, że używasz tej samej wersji. KLIENT: 1.3.2, SERWER: 1.3.3'x. –

3

spróbuj uruchomić "aktualizację pakietu" w swoim terminalu, a następnie spróbuj ponownie "konsoli szyn" jak zwykle - miałem ten sam problem, aktualizację pakietu aktualizacji najpierw naprawiono dla mnie!

+3

Powiedziałbym, że aktualizacja pakietu zazwyczaj nie jest świetnym pomysłem, chyba że jesteś pewien, że wszystkie twoje klejnoty mogą być aktualizowane bez niszczenia rzeczy. –

2

Uruchomienie: ps aux | grep spring, a następnie zabij proces wiosny.

To zadziałało dla mnie.

2

Miałem podobny problem, próbując uruchamiać polecenia rails poza kontenerem dokowania.

W moim przypadku mój plik Gemfile.lock powiedział, że używa Spring (1.3.4), ale komunikat o błędzie powiedział, że mój serwer był w wersji 1.3.5. Przedłużenie mojej komendy z bundle exec również nie miało znaczenia. Uruchamiając

gem list | grep spring

zauważyłem miałem zainstalowane różne wersje.Po wpadłem

gem uninstall spring -v '1.3.5'

i bundle znowu działało idealnie.

Kto wie, być może potrzebowałem nowszej wersji dla jakiegoś innego projektu w pewnym momencie.

0

zatrzymać serwer wiosna

spring stop 
+0

Należy pamiętać, że to pytanie ma już pół roku i że wiele osób zaproponowało już dokładnie to samo pół roku temu ;-) – Carpetsmoker

Powiązane problemy