Ich habe ein Python-Skript, das ich nur einmal ausführen muss (ich möchte es nicht an das Repo übergeben müssen, um es an die Cedar-Instanz zu senden).

Das Skript aggregiert Daten über meine Django-Modelle und gibt eine CSV-Datei aus.

Normalerweise würde ich in AWS das Skript an den Server scp, manage.py shell < script.py und scp die erzeugte CSV-Datei an meinen Computer zurücksenden.

Ich verstehe, dass Heroku-Dateisysteme kurzlebig sind, aber gibt es eine Möglichkeit, produzierte Dateien auf Heroku-Servern abzurufen, ohne sie in S3 hochzuladen?

Hier ist mein bester Schuss:

cat script.py | heroku run manage.py shell --app appname

Funktioniert für ein einzeiliges Skript, jedoch nicht mit Zeilenumbrüchen.

Außerdem erzeugt das obige Skript nur eine Befehlszeilenausgabe und keine CSV-Datei zurück.

4
grokpot 10 Dez. 2013 im 03:45

3 Antworten

Beste Antwort

Heroku gibt Ihnen keine Schreibberechtigungen für Ihren Prüfstand (die einzigen Dateien, die es schreibt, sind diejenigen, die es aus Ihrem Hauptzweig auscheckt, wenn Sie ein Update senden, und alle Abhängigkeiten). Sie müssen Ihre Ausgabe in S3 hochladen, im Protokoll speichern oder einen anderen Übermittlungsmechanismus finden (E-Mail?)

2
jraede 9 Dez. 2013 im 23:49

Du bist fast da. Das Problem, das Sie haben, hängt eher mit der Funktionsweise der typischen Shell-Syntax zusammen.

Sie haben cat script.py | heroku run manage.py shell --app appname, die im Skript ohne Zeilenumbrüche weitergeleitet werden.

Versuchen Sie dies, um Ihre Zeilenumbrüche zu erhalten.

herkoku run python -c "`cat script.py`" --app appname

Der Schlüssel besteht darin, die Backticks in doppelte Anführungszeichen zu setzen, damit Zeilenumbrüche im Skript erhalten bleiben.

1
Rollo 14 Juni 2016 im 14:35

Ich wollte ein Python-Skript einmal manuell in Heroku ausführen. So hat es funktioniert:

  1. import django in Ihrem Skript
  2. Fügen Sie die Zeile django.setup() in Ihr Python-Skript ein (dies ist wichtig, um die erstellten Modelle in Django verwenden zu können).
  3. Shell-Befehl (muss in Ihrem Git-Repository ausgeführt werden): heroku run bash
  4. Bash-Befehl: export DJANGO_SETTINGS_MODULE=projectsname.settings
  5. Bash-Befehl: cd projectsname
  6. Bash-Befehl: python yourscriptname.py
3
tbraun89 16 Juni 2015 im 17:53