2016-07-22 15 views
1

Ich versuche, ein wirklich einfaches Python-Programm als Hintergrundprozess auf IBM Bluemix als CloudFoundry-App laufen zu lassen.Wie laufe ich Hintergrundprozesse auf Bluemix?

Ich habe es in eine Github repo setzen. Es gibt eine einzeilige req-Datei, weil ich es einfacher finde als eine setup.py und das python buildpack benötigt sie.

Mein vollständiger Anwendungsfall ist, dass ich eine API mit Django geschrieben habe und ich brauche einen MQTT-Client, der neben ihm laufen wird, um Daten von einem Broker zu sammeln (etwas mit Watson IOT denke ich).

Ich habe versucht, mit einer 2-Linien procfile suchen, wie diese beide in der gleichen CF App auszuführen:

web: gunicorn -e DJANGO_SETTINGS_MODULE=conf.dev conf.wsgi --workers 2 
worker: python time.py 

aber der zweite Prozess wurde einfach ignoriert.

Ich habe es auch in der aktuellen Konfiguration versucht, aber mit einem Procfile, das nur die zweite Zeile enthielt und es sagte mir, dass es den Startbefehl nicht finden konnte.

nun mit Startbefehl in dem Manifest und no-route bei true, entweder es nicht der Gesundheitsprüfung nicht besteht, oder es nur an dem Startschritt warten, bis ich diesen Fehler:

2016-07-22T13:10:36.671+0200 
[LGR/null] 
err 
WebsocketListener.Start: Error connecting to a doppler server 
2016-07-22T13:10:36.677+0200 
[LGR/null] 
err 
proxy: error connecting to 159.8.128.238:8081: dial tcp 159.8.128.238:8081: getsockopt: connection refused 

So, Gibt es eine Möglichkeit, Hintergrundaufgaben in Bluemix auszuführen, wenn möglich als Standalone-App (einfacher skalieren und aktualisieren)?

EDIT: jetzt funktioniert es, wenn ich nicht etwas anderes als einen Tippfehler zu formatieren, eine Zeichenfolge in meinem Python-Skript, obwohl die App Absturz nur etwa jede Minute

Removing crash for app with id 3978a475-4dc6-495f-9662-a6fd562dc28a 

Antwort

1

Kurze Antwort auf die Frage geändert haben: eine separate App mit no-route Argument auf true

Ok, so habe ich offenbar es vollständig funktioniert.

Ich bin mir nicht sicher, was ich getan habe, aber das Problem könnte von der Tatsache herrühren, dass ich nach einer 32M-Instanz fragte und das Minimum scheint 64M zu sein, also war Bluemix/CF nicht so glücklich mit meiner Nachfrage und abgestürzt ist.

Ich war mit 128M in meinem älteren versucht, aber ich denke, dass ich nicht no-route: true zu der Zeit gebracht hat

+0

Dies ist der richtige Weg, es zu tun, eine separate App mit No-Route. – opiethehokie

+0

@opiethehokie genau das, was ich sagen wollte –

0

ich den Ansatz verwendet, um zwei separate Anwendungen für das Web und die Arbeiter Instanzen laufen. Ich stolperte jedoch immer noch über den Gesundheitscheck, der versagte.

Also für die Arbeiter empfehle ich, das Routing zu deaktivieren und zusätzlich Gesundheitschecks zu deaktivieren.

Das folgende Manifest funktionierte für den Betrieb von Django durch Gunicorn für Web und Sellerie für die Arbeiter. Ich fügte hinzu, Migration und collecstatic Befehle an das Skript ausführen

Mein manifest.yml

--- 
applications: 
    - name: myapp 
    host: myapp 
    domain: eu-de.mybluemix.net 
    memory: 128M 
    command: bash ./run_web.sh 

    - name: myapp-workers 
    memory: 128M 
    no-route: true 
    health-check-type: none 
    command: bash ./run_worker.sh 

Der run_web.sh und run_worker.sh Shell-Skripte enthält die Befehle, die Komponenten und für die Web-Instanz laufen.

Verwandte Themen