2014-12-31 17 views
9

Ohne cd-in das Stammverzeichnis meiner Rails-Anwendung, wie kann ich einen Rails oder Rake-Befehl für diese Anwendung ausführen.Wie führe ich Rails/Rake aus einem anderen Verzeichnis?

Ich habe versucht:

bundle exec rake my_tasks:do_stuff BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile 

unter anderen Kombinationen, ohne Erfolg.

[Update]

Die Frage ist eigentlich zweifach, Bündel nicht weiß, wo die gemfile ist und Harke nicht weiß, was zu laufen.

Bündler benutzen:

BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile bundle exec ... 

Beachten Sie, dass BUNDLE_GEMFILE vor 'Bündel exec' zu gehen.

Rake zu benutzen:

rake -f /PATH/TO/RAILS_APP/Rakefile my_task:do_stuff 

Rails-Konsole zu verwenden:

???? 

noch hat, um herauszufinden, wie die Rails-Konsole aus einem anderen Verzeichnis einzugeben. Mit Blick auf die source, ich denke, es ist vielleicht nicht möglich, weil es schließlich File.join ('Skript', 'Rails'), um den Prozess Schiene loszutreten.

+0

Es gibt [mehrere gute Antworten hier] (http://stackoverflow.com/questions/1206545/run-rake-task-from-outside-rails-root) aber ich denke, die beste Antwort ist wahrscheinlich, dass Sie sollten nicht ' t mach das :-). Wenn möglich, werden Sie feststellen, dass jeder einzelne Pfad, auf den im Aufruf von Rake verwiesen wird, selbst innerhalb der aufgerufenen Rake-Tasks verwechselt wird, da sie erwarten, dass sie in dem Verzeichnis verankert sind, aus dem die Task ausgeführt wird. –

+0

Guter Punkt, Tom. Wie Bill sagt, müssen die Aufgaben CWD-agnostisch sein. Für kleine Aufgaben sollte dies kein Problem sein. Vielen Dank! – Nejuf

Antwort

10

Ohne dass Sie die Fehlermeldung anzeigen, die Sie erhalten, nehme ich an, dass es weniger mit Bundler zu tun hat als mit Rake. Wenn der Rake-Befehl ausgeführt wird, sucht er nach einer Rakefile, die im aktuellen Verzeichnis beginnt und den Baum durchläuft, bis er einen findet. Sie können dieses Verhalten überschreiben, indem Sie explizit eine Rakefile in den Optionen für den Rake-Befehl angeben. Dies geschieht mit der Option -f <RAKEFILE>.

z.

bundle exec rake -f /PATH/TO/RAILS_APP/Rakefile -T 

Bedenken Sie, dass Ihre Rake-Aufgaben "CWD-agnostisch" sein müssen. Die meisten Aufgaben und Skripts sind so, dass sie das Projektverzeichnis basierend auf einem Pfad relativ zu einer bekannten Datei in der Verzeichnisstruktur abrufen. Sie verstehen das wahrscheinlich schon, aber es ist erwähnenswert, wenn die Tasks erwarten, dass das aktuelle Arbeitsverzeichnis tatsächlich das roots root ist. Das wäre ein Fall, in dem sie von außerhalb des Projekts geführt werden könnten, könnte gefährlich sein.

+0

Danke das Problem war eigentlich zweifach für mich: Bundle konnte die gemfile nicht finden, und Rake hatte nicht den richtigen Kontext. Deine Antwort hat den Rechenbereich repariert, danke! Ich werde meine Antwort bearbeiten, um die Ergebnisse zu reflektieren. – Nejuf