2016-03-21 13 views
2

Ich versuche, eine Anwendung von Segeln zu FOXX zu verschieben. Ich hatte erwartet, dass ich node.js Module in FOXX verwenden könnte, aber ich stieß auf ein Problem. Ich muss ein "Arbeits" -Verzeichnis auf dem Server erstellen, um Operationen für SCM-Repositorys auszuführen. Ich habe die Module "remove" und "mkdirp" installiert. Das mkdirp-Modul ruft fs.lstatSync auf, das unter FOXX als vermisst gemeldet wird. Die Installation einer Kopie des lokalen Knotens von fs löst die Probleme nicht.ArangoDB FOXX Knoten Erweiterungen

Wenn dies ein Problem ist, dann sind einige meiner anderen Aufgaben, wie das Erstellen eines externen Befehlszeilenprogramms, möglicherweise nicht möglich. In diesem Fall muss ich vielleicht überdenken, alle Aufgaben auf FOXX zu verschieben, aber das würde bedeuten, dass viele Funktionen in beiden Segeln und FOXX repliziert würden, was ein Albtraum für die Bereitstellung sein könnte.

Antwort

2

Während Foxx sehr flexibel ist, läuft es "nur" in der JavaScript-Umgebung von ArangoDB. Diese Umgebung ist nicht vollständig kompatibel mit Node (und daher einige Module auf NPM), insbesondere wenn es sich um asynchronen Code oder Dateisystem- und Netzwerk-I/O handelt.

Speziell das Modul fs unterscheidet Nodes eingebautes fs Modul.

Zum Glück die beiden Funktionen die remove und mkdirp Module bieten bereits eingebaut in fs Moduls ArangoDB:

  • fs.makeDirectoryRecursive äquivalent zu mkdirp
  • fs.removeDirectoryRecursive entspricht remove

Es Es ist möglich, externe Prozesse innerhalb von ArangoDB zu generieren, aber die entsprechende Funktionalität gehört dazu die interne API und nicht für die Verwendung in Foxx-Diensten vorgesehen (neben anderen Einschränkungen gibt es derzeit keine Möglichkeit, an die Ausgabe zu gelangen, sondern nur den Exit-Status).

Je nachdem, was Sie erreichen möchten und wie Ihre Leistungsanforderungen aussehen, kann es in der Tat eine bessere Idee sein, I/O-lastigen Code in einen externen Node-Microservice zu separieren. Foxx eignet sich am besten als Anwendungslogik-Wrapper für die zugrunde liegende Datenbank, und der gesamte Foxx-Code läuft neben anderem ArangoDB-JavaScript-Code. Daher können lang andauernde Anforderungen die Fähigkeit von ArangoDB beeinträchtigen, andere Anforderungen zu bearbeiten, die die JavaScript-Ebene berühren müssen.

In Ihrem speziellen Fall (Sie erwähnen die Interaktion mit SCM-Software) würde ich empfehlen, einen kleinen eigenständigen Node-Dienst zu erstellen, um mit der SCM-Logik umzugehen und von Segeln mit beiden zu kommunizieren (oder sogar zwischen den beiden Diensten). Dies bedeutet zwar zunächst einen zusätzlichen Overhead, ist aber auch wesentlich besser skalierbar als die CPU-Zyklen in ArangoDB für nicht datenbankbezogene Tasks.

+0

Das macht sehr viel Sinn. Vielen Dank. – ggendel