Beim Versuch, ein Modell zu erstellen, hängen die Befehle "Schienen generieren"

69

Ich bin neu in Rails und habe heute Morgen beschlossen, mein gesamtes Datenbankdesign / -modell zu sichern und von vorne zu beginnen. Und da ich ein Noob bin, habe ich es sicher falsch gemacht.

Ich habe alle Dateien entfernt db/migrate/ und die Tabellen gelöscht. Und als ich versuchte, die erste neue Modellklasse zu generieren, hingen die Schienen einfach. 10 Minuten im Unkraut, bevor ich ^ C drückte und etwas anderes versuchte.

Dieses Mal habe ich die Tabellen erneut gelöscht, das gesamte Projekt in project.bad verschoben und neue Schienen erstellt, um von vorne zu beginnen. Nachdem das neue Projekt mit dem alten Namen erstellt worden war, hing es wieder an derrails generate Befehl (ich habe denselben Projektnamen verwendet).

In meiner Verzweiflung habe ich versucht, ein neues Projekt im selben Stamm zu erstellen, aber mit einem anderen Namen. Eureka! Dies funktionierte wie ein Champion, der Controller und Modellklassen erstellte, aber ich kann mit dem ursprünglichen Projektnamen, im ursprünglichen Projekt oder in einem neu erstellten Projekt überhaupt nichts generieren. Was fehlt mir, um das wieder zum Laufen zu bringen? An dieser Stelle macht mir ein vollständiger Verlust nichts aus, aber ich möchte den ursprünglichen Projektnamen wieder verwenden können!

So sieht log / development.log aus:

   (255.5ms)  CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB
   (337.7ms)  CREATE UNIQUE INDEX `unique_schema_migrations`  ON `schema_migrations` (`version`) 
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
   (0.2ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations`

Irgendeine Idee, was nach dieser letzten AUSWAHL passieren soll?

Bret
quelle
Welche Befehle haben Sie ausgegeben, bevor Schienen hingen? Und was hing? Der Webserver? Die Konsole?
Mahatmanich
Ich habe sowohl "Rails Generate Model User" als auch "Rails Generate Controller Welcome Index" ausprobiert. Beide Befehle hingen einfach. Dies ist so früh in der Entwicklung meines Projektes , dass ich konnte einfach all meinen aktuellen Code werfen und von vorne anfangen, aber Schienen macht es nicht besser mit einem frisch angelegten Projekt , wenn der Name das gleiche ist wie das Original (nachdem ich gelöscht habe oder das Original umbenannt).
Bret
Haben Sie versucht, das Terminal zurückzusetzen? Alle Terminalfenster schließen? Könnte sein, dass die alte Schienenumgebung noch vorhanden ist. Mit rvm oder rbenv?
Mahatmanich
Mit rbenv. Ich werde versuchen, die Terminals zu schließen und neue zu bekommen.
Bret
Wenn Sie es natürlich umbenannt haben, müssen Sie auch die Anwendung 'config / application.rb' umbenennen. Hat das Bundle oder die Bundle-Installation irgendetwas in den alten Projekten getan? Außerdem endeten Ihre "Generierungs" -Befehle korrekt und schickten Sie nicht in ein Terminal-Nirvana, z. B. ein / am Ende des Befehls
Mahatmanich,

Antworten:

211

Wenn dein rails generate Befehle hängen bleiben, ist es höchstwahrscheinlich, dass die generierten Binstubs von Schienen das Problem sind. Wie Sie bereits erwähnt haben, haben Sie das Projekt umbenannt.

Meine Vermutung ist, dass einige Pfade in den Binstubs noch auf das alte Projektverzeichnis gesetzt waren, aber nicht mehr existierten.

Es gibt hier einen großartigen Artikel darüber, wie binstubs funktionieren: https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs

Schienen 4

Um die binstubs zurückzusetzen, löschen Sie einfach Ihr bin/Verzeichnis in Rails und führen Sie Folgendes aus:

# generates binstubs for ALL gems in the bundle
bundle install --binstubs

# ...OR, generate binstubs for a SINGLE gem (recommended)
bundle binstubs rake

Schienen 5 / Schienen 6

Um die binstubs zurückzusetzen, löschen Sie einfach Ihr bin/Verzeichnis in Rails und führen Sie Folgendes aus:

rake app:update:bin

Warum müssen wir den Befehl 'rake' für Schienen 5 und höher verwenden und nicht den Befehl 'rails' selbst?

Seit Rails 5 sind einige 'Rake'-Befehle im' Rails'-Befehl enthalten. Wenn man jedoch das Verzeichnis 'bin /' löscht, entfernt man auch den Befehl 'Rails' selbst, so dass man zum Zurücksetzen zu 'Rake' zurückkehren muss, da 'Rails' nicht mehr verfügbar ist, 'Rake' jedoch immer noch.

Mahatmanich
quelle
Ich habe herausgefunden, dass ich zu VERSION = 0 hätte zurückkehren sollen, aber ich wollte alles rauswerfen, was ich bisher getan habe, also habe ich alles aus db / migrate gelöscht. Ich sagte, es sei ein Noob-Fehler ... Ich habe den Inhalt von log / development.log oben aufgenommen.
Bret
Ups, ich habe gepatzt. Die "Schienen neu" funktionierten, aber "Schienen erzeugen Modell Foo" schlug fehl und verursachte den Hang. Ich habe die ursprüngliche Frage korrigiert, um dies widerzuspiegeln.
Bret
1
@ Aaroninus Ah macht Sinn. Seit Rails 5 sind einige Rake-Befehle im railsBefehl gekapselt . Wenn Sie jedoch löschen bin/, entfernen Sie auch den railsBefehl, sodass Sie zum Harken zurückkehren müssen. Ich werde ein Update machen. Danke für die Warnung!
Mahatmanich
1
Vielen Dank! Das war mein Problem. Nach dem Laufen rake app:update:binin Rails 5 lief das Gerüst.
Christopher Warrington
1
Ihre Lösung für Rails 5 hat für mich wie ein Zauber gewirkt. Ich erzeugte ein Gerüst, das für mich hing; jetzt funktioniert es einwandfrei! Danke vielmals!!
Biju
75

Fand dies unter http://www.dixis.com/?p=754

Für eines meiner Projekte verwende ich Rails 4.1 (Bleeding Edge! Yeah :)) und habe plötzlich bemerkt, dass nach dem Öffnen meines Laptops am Morgen meine normalen Rails Befehle wie

$> rails c
$> rails g migration Bla name description some_more_fields

nur ... hingen und nichts passierte ??? Als würden sie auf weitere Eingaben warten. Bei näherer Betrachtung nahm ich an, dass die Verbindung zum Federprozess unterbrochen / beschädigt war (ich bewege mich viel zwischen Netzwerken? Vielleicht könnte das das erklären).

Für diejenigen, die nicht wissen, wie ich es war, ist Spring ein Rails-Anwendungs-Preloader. Es beschleunigt die Entwicklung, indem Ihre Anwendung im Hintergrund ausgeführt wird, sodass Sie sie nicht jedes Mal starten müssen, wenn Sie einen Test, eine Rechenaufgabe oder eine Migration ausführen. Wenn diese Verbindung unterbrochen oder beschädigt wird, hängt sie natürlich.

Eine einfache

$> spring stop

Stoppt den Federserver. Danach startet ihn jeder Rails-Befehl automatisch neu. Fest :)

Daniel
quelle
2
Das war genau mein Problem. Vielen Dank!
Jarsen
1
Dies hat mein Problem behoben. Vielen Dank!!
Yusufali2205
hier gilt das gleiche. Debian mit wsl2 unter Windows 10 ausführen, falls jemand danach sucht.
Adrian
11

In Rails 5 werden die binstups mit dem railsBefehl erstellt.

Ich habe gerade den bin-Ordner selbst gelöscht und bin dann ausgeführt worden, rails app:update:binwodurch meine Probleme behoben wurden.

In Rails 5 enthält das bin / -Verzeichnis Ihrer App ausführbare Dateien, die wie jeder andere Quellcode versioniert sind, und keine Stubs, die bei Bedarf generiert werden.

So aktualisieren Sie:

bundle config --delete bin    # Turn off Bundler's stub generator
rails app:update:bin          # Use the new Rails 5 executables
git add bin                   # Add bin/ to source control
mtrolle
quelle
2

Ich musste nur töten spring.

Vor

$ rails generate yaddi-yaddi-yadda
hang...
hang...
hang..
^C

Mein Fix:

$ ps -u {user} | grep rails
123 123456 spring app ...

Finde die PID und töte spring.

$ rails generate yaddi-yaddi-yadda
# success.
Tristan Hall
quelle
1

TL; DR: Der Neustart des Computers hat bei mir funktioniert.

Ich hatte das gleiche Problem, und obwohl die gewählte Antwort funktionierte, war es mir unangenehm, ein paar Dinge zu löschen, die ich zugegebenermaßen nicht vollständig verstehe. Mein Git-Status im binVerzeichnis sah so aus, nachdem ich das bin-Verzeichnis gelöscht und ausgeführt hatterails app:update:bin

deleted:    bin/bundle
modified:   bin/rails
modified:   bin/rake
modified:   bin/setup
deleted:    bin/spring
deleted:    bin/webpack
deleted:    bin/webpack-dev-server
deleted:    bin/yarn

Ich hatte das Gefühl, dass etwas zurückkommen könnte, um mich später zu beißen. Nachdem ich den Artikel gelesen hatte, auf den in der akzeptierten Antwort ( http://www.dixis.com/?p=754 ) verwiesen wird, beschloss ich, meinen Computer einfach neu zu starten, da dies das Problem beheben würde Netzwerkprobleme. Es funktionierte wie ein Zauber.

Caleb
quelle
-1

Ich hatte das gleiche Problem beim Versuch zu verwenden rails g controllerund es würde einfach hängen. Ich habe die gleichen Schritte ausgeführt, die @mtrolle vorgeschlagen hat:

bundle config --delete bin
rails app:update:bin
git add bin

Als ich lief rails g controller Project index , wurden der Controller, die Helfer sowie die Indexansicht und die GET 'project/index'Route wie erwartet erstellt.

David Patrick Donohue
quelle