2015-03-23 3 views
13

Ich bin vor einem Fehler führen, wenn ich eine Migration ausgeführt wird:kann nicht Migration nach Frühling Update in 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' 

So mit einigen googeln ich laufe Bündel Update Frühjahr, die den obigen Fehler behoben, und ich kann Migrationen entfernen/hinzufügen. Wieder, wenn ich laufen rake db: wandern, erhalte ich Fehler wie:

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 

Bitte helfen Sie mir.

Antwort

28

Nach bundle update läuft und Aktualisieren von Spring, ich war immer die folgende Fehlermeldung, wenn die Konsole ausgeführt wird:

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 

ich die Empfehlungen gefolgt in this Github issue und lief:

spring stop 

Dies das Problem behoben für mich.

+0

Es gibt andere hilfreiche Vorschläge, die in diesem Problem erwähnt werden. +1. –

1

Dies geschieht, weil eine der Abhängigkeiten des Projektes ist eine ältere Version von Spring als auf Ihrem System installiert ist:

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) 

Der richtige Weg zu bewältigen ist dies bundle exec auf Ihren Befehl vorangestellt wird, wie Die Fehlermeldung zeigt an. Siehe unten:

Wenn Sie eine ausführbare Datei ausführen, verwenden Sie IMMER bundle exec [Befehl]. Zitat aus der Bundler-Dokumentation: In einigen Fällen kann das Ausführen von ausführbaren Dateien ohne Bundle-Exec funktionieren, wenn die ausführbare Datei zufällig in Ihrem System installiert ist und keine Edelsteine ​​einzieht, die mit Ihrem Bundle kollidieren. Dies ist jedoch unzuverlässig und verursacht erhebliche Schmerzen.

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

bundle update Laufen kann einige andere Probleme verursachen. Wenn der zweite Fehler weiterhin besteht, möchten Sie möglicherweise von der Versionskontrolle zu Ihrem alten Gemfile zurückkehren.

+3

ich bereits mit Bündel exec versucht, aber es hat mir nicht geholfen. –

+0

Erhalten Sie den ersten oder zweiten Fehler. Die zweite ist wegen 'Bundle update' und wird nicht mit' bundle exec' behoben. Um den zweiten Fehler zu beheben, müssen Sie Ihren Code auf einen Punkt zurücksetzen, bevor Sie die Versionskontrolle von der Versionskontrolle übernommen haben. – Drenmi

+0

Ich mache das gleiche, wenn ich den Befehl migration erneut hinzufüge, bekomme ich dieses Problem: 'Es gibt eine Versionskonflikt zwischen dem Frühling-Client und dem Server. Sie sollten den Server neu starten und sicherstellen, dass Sie die gleiche Version verwenden. CLIENT: 1.3.2, SERVER: 1.3.3'x. –

3

versuchen Sie "Bundle Update" in Ihrem Terminal, dann versuchen Sie wieder "Rails-Konsole" wie üblich - ich hatte das gleiche Problem, das Bundle Update zuerst für mich repariert!

+3

Ich würde sagen, dass Bundle-Update ist in der Regel keine gute Idee, es sei denn, Sie sind sicher, dass alle Ihre Edelsteine ​​aktualisieren können, ohne die Dinge zu brechen. –

2

Ausführen: ps aux | grep Frühling, dann töte den Frühlingsprozess.

Es funktionierte für mich.

2

Ich hatte ein ähnliches Problem beim Ausführen von Rails-Befehle außerhalb meiner Andock-Container.

In meinem Fall sagte meine Gemfile.lock-Datei, Spring (1.3.4) zu verwenden, aber die Fehlermeldung, dass mein Server Version 1.3.5 ausgeführt wurde. Es war auch egal, meinen Befehl mit bundle exec voranzustellen. Durch den Betrieb

gem list | grep spring

Ich bemerkte, ich hatte mehrere Versionen installiert.Nachdem ich

lief

gem uninstall spring -v '1.3.5'

und bundle wieder, es funktionierte perfekt.

Wer weiß, vielleicht habe ich die neuere Version für ein anderes Projekt irgendwann benötigt.

0

Stoppen Sie die Feder Server

spring stop 
+0

Beachten Sie, dass diese Frage ein halbes Jahr alt ist und dass mehrere Leute bereits vor einem halben Jahr genau dasselbe vorgeschlagen haben ;-) – Carpetsmoker