2013-07-23 17 views
60

Ich habe zwei Zweige, Entwicklung und Produktion. Jede hat Abhängigkeiten, von denen einige unterschiedlich sind. Entwicklung zeigt auf Abhängigkeiten, die sich in Entwicklung befinden. Ebenso für die Produktion. Ich muss zu Heroku bereitstellen, das die Abhängigkeiten jeder Verzweigung in einer einzelnen Datei erwartet, die "Anforderungen.txt" genannt wird.Wie man eine requirements.txt für mehrere Umgebungen anpassen kann?

Was ist der beste Weg zu organisieren?

Was ich gedacht:

  • pflegen gesonderte Anforderungen Dateien, eine in jedem Zweig (muss häufige Verschmelzungen überleben!)
  • Sagen Heroku die Anforderungen Datei, die ich verwenden möchten (Umgebungsvariable?)
  • schreiben Skripte bereitstellen (Temp Zweig erstellen, Anforderungen Datei ändern, verpflichten, implementieren, löschen Temp Zweig)
+1

einfacher Bereitstellung Skript: 2 Dateien verwalten. Verwenden Sie symlink zwischen ihnen. – Udy

Antwort

107

Sie können Ihre Anforderungen Dateien und nutzen die „-r“ fla kaskadieren g um pip zu sagen, dass der Inhalt einer Datei in eine andere eingefügt werden soll.

`-- django_project_root 
|-- requirements 
| |-- common.txt 
| |-- dev.txt 
| `-- prod.txt 
`-- requirements.txt 

Die Dateiinhalte würden wie folgt aussehen:

common.txt:

# Contains requirements common to all environments 
req1==1.0 
req2==1.0 
req3==1.0 
... 

dev.txt: Sie können Ihre Anforderungen in eine modulare Ordnerhierarchie wie folgt ausbricht

# Specifies only dev-specific requirements 
# But imports the common ones too 
-r common.txt 
dev_req==1.0 
... 

prod.txt:

# Same for prod... 
-r common.txt 
prod_req==1.0 
... 

Außerhalb Heroku, können Sie jetzt Setup-Umgebungen wie folgt aus:

pip install -r requirements/dev.txt 

oder

pip install -r requirements/prod.txt 

Seit Heroku im Projektstamm speziell für "requirements.txt" aussieht, sollte es nur Spiegel prod, wie folgt aus:

requirements.txt:

# Mirrors prod 
-r requirements/prod.txt 
+2

Sie haben das Problem der Verwendung separater Anforderungsdateien für verschiedene Umgebungen auf heroku ignoriert. –

+9

Ich glaube, meine Antwort hat das angesprochen. –

+1

Ich suchte nach einer Möglichkeit, unterschiedliche Anforderungen an Heroku für das Staging (wo ich zusätzliche Debug-Pakete möchte) und Produktionsumgebung (wo ich diese Debug-Pakete nicht benötige) zu haben. Leider, wie @EdJ sagte, geht diese Antwort nicht darauf ein. –