Gibt es eine Möglichkeit, die Ruby-Datei foo.rb an die Rails-Konsole zu übergeben ? Erwartete Ergebnisse sind, nachdem die Konsole die Rails-Umgebung gestartet hat, um die Datei auszuführen.
Oder eine andere Möglichkeit, mit der ich Dateien in einer Rails-Umgebung ausführen kann, die über die Eingabeaufforderung ausgelöst wird.
ruby-on-rails-3
Haris Krajina
quelle
quelle
Antworten:
Eigentlich ist der einfachste Weg, es mit
load
innerhalb der auszuführenrails console
quelle
Sie können verwenden
AKTUALISIEREN:
Was wir in letzter Zeit auch häufig verwendet haben, ist das Laden der Rails-Umgebung aus dem Skript selbst heraus. Bedenken Sie
doit.rb
:Dies funktioniert auch, wenn sich das Skript oder das aktuelle Arbeitsverzeichnis nicht im Verzeichnis der Rails-App befinden.
quelle
f=File.new('path/to/file')
auszuführen : zum Ausführen verwenden:f.rewind; eval f.readlines.join("\n");
eval(File.read ...)
Teil nicht mehr. Rails akzeptiert eine Ruby-Datei als Argument fürrails runner
:Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
rails r path/to/filename.rb
es dembundle exec rails runner
oben genannten Befehl funktional entspricht .In der Zwischenzeit wurde diese Lösung unterstützt.
Jetzt viel einfacher.
quelle
einfach, schmutzig und blockieren den Prozess am Ende, aber es macht den Job genau so, wie ich es wollte.
quelle
Erwägen Sie das Erstellen einer Rechenaufgabe.
Für Code, den ich zum Erstellen von Datensätzen oder zum Unterstützen von Migrationen benötige, erstelle ich häufig eine solche Rechenaufgabe aus dieser Antwort . Beispielsweise:
In
lib/tasks/example.rake
:Und dann im Terminal laufen:
quelle
Von diesen zuvor erwähnten Ansätzen schien keiner sauber und ideal zu sein, als würde man erwarten, dass ein eigenständiges Skript ausgeführt wird (nicht über <Umleitung bewertet oder weitergeleitet), aber schließlich funktioniert dies perfekt für mich:
(für Schienen 3)
Fügen Sie oben in Ihr Skript ein:
Legen Sie natürlich Ihren eigenen Rails-App-Pfad in der Zeile APP_PATH fest.
Auf diese Weise kann ich vermeiden , jede interaktive Eingabe eines
irb
oderrails c
und kann meine testen script.rb von der Eingabeaufforderung Shell, bevor zB. Planen Sie es in Crontab.Es unterstützt auch problemlos Befehlszeilenparameter und minimiert die Anzahl der Wrapper, bevor Sie zu Ihrem Code gelangen.
CREDIT (zeigt auch ein Rails 2-Beispiel)
http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html
quelle
Hier ist der Hack, den ich benutze:
Beispiel:
Basierend auf der Antwort von @ moritz hier. Ich habe es geändert, da das Arbeitsverzeichnis für
File.read
das Rails-Projektstammverzeichnis ist.Ich weiß, dass dies eine ernsthafte Häresie ist, bei der Python verwendet wird, um einem Ruby-Skript zu helfen. Aber ich konnte keine
relpath
in Ruby eingebaute Methode finden .Gutschrift:
relpath()
wurde von @MestreLion übernommen. Konvertieren Sie den absoluten Pfad in einen relativen Pfad in einem aktuellen Verzeichnis mit Bashquelle