Symfony2-Befehl in einem asynchronen Subprozess

8

Ich bin neu bei Symfony2 und wurde beim Versuch, einen asynchronen Befehl auszuführen wie folgt blockiert:

%Vor%

Das funktioniert einwandfrei, wenn ich es von meiner Kommandozeile aus anrufe:

%Vor%

Aber es funktioniert nicht, wenn ich es einen Symfony2-Prozess trowh nenne:

%Vor%

Ich erhalte einen Datenbankfehler: " [MongoWriteConcernException] 127.0.0.1:27017: nicht master "

Ich denke, das bedeutet, dass der Prozess nicht meine Datenbankkonfiguration bekommt ...

Ich möchte nur einen asynchronen Prozess ausführen, gibt es einen anderen Weg?

Vielleicht eine Möglichkeit, den Anwendungsbefehl aufzurufen, der die Antwort nicht benötigt, um weiterzumachen?

Vielleicht muss ich die Injektion verwenden?

PS: Mein aktueller Befehl ist nur ein Test, am Ende sollte es eine 'teure' Operation sein ...

    
blueocean 27.05.2014, 11:19
quelle

3 Antworten

6

Nun, ich habe herausgefunden, was passiert ist ...

Ich verwende mehrere Umgebungen: DEV, TEST und PROD.

Und ich benutze auch verschiedene Server.

Also ist die DEV-Umgebung meine eigene Maschine mit einer einfachen Mongodb-Konfiguration. Die TEST-Umgebung befindet sich jedoch auf einem anderen Server mit einer Replikatgruppe -Konfiguration ...

Nun wird der Fehler vollständig verstanden: "[MongoWriteConcernException] 127.0.0.1:27017: nicht master"

Um es zu lösen, habe ich gerade den Umgebungsparameter ( - env ​​= ) hinzugefügt und alles funktioniert wie ein Zauber:

%Vor%

Um die richtige Umgebung zu erhalten, verwende ich Folgendes:

%Vor%

Wie lautet mein Code?

%Vor%

Vielleicht ist das kein schöner Weg, aber es funktioniert für mich:)

    
blueocean 28.05.2014 10:39
quelle
1

Disklamer: Das könnte etwas übertrieben sein für das, was Sie versuchen zu tun:)

Ich würde einen umgekehrten Weg wählen: pthreads

Erstens hat mir die schnelle Untersuchung von StackOverflow ein wirklich schönes Beispiel für die Verwendung von pthreads gezeigt: Multithreading ist möglich in php

Dann sollten Sie wissen, dass Sie Ihren Befehl von einem anderen Befehl aus aufrufen können:

Ссылка

... lässt Sie alle Teile zusammenfügen. Es ist ein bisschen kompliziert, aber es macht den Job.

    
Jovan Perovic 27.05.2014 13:18
quelle
0

Falls Sie Ihren Code in Symfony2 / 3 vollständig asynchron ausführen möchten, gibt es dazu AsyncServiceCallBundle .

Sie sollten es einfach so nennen:

%Vor%

Intern verwendet es diesen Ansatz, um den Code im Hintergrund auszuführen.

    
Andrey Mischenko 03.12.2017 21:32
quelle