2015-12-08 3 views
14

Anwendung muss Protokolldaten auf dem Netzlaufwerk speichern. Wenn das Laufwerk unter Windows gehostet wird, ist alles in Ordnung. Wenn das Laufwerk unter Mac gehostet wird, ist Lesen/Schreiben OK, aber Append ruft EPERM ab, so dass Protokoll überhaupt nicht funktioniert. Der Code ist ziemlich trivialEPERM auf appendFile auf Netzlaufwerk

fs.appendFileSync('xxx.txt', 'zzzzzzzz'); 

Wie die Daten korrekt anhängen? Die Datei ist normalerweise zu groß, um in den Speicher geladen zu werden.

Update: lesen-schreiben-löschen-erstellen ist Ok! Nur Öffnen mit Append fehlgeschlagen

+0

Neugierig, wenn Sie fs.appendFile ausprobiert haben? Wahrscheinlich dasselbe Ergebnis, aber einen Versuch wert. – Gary

+0

Alle Anhänge schlagen fehl. Sogar createWriteStream mit dem Flag 'a'. Allerdings funktioniert das Schreiben ohne dieses Flag einwandfrei –

+0

Haben Sie ls -le xxx.txt gemacht? Möglicherweise haben Sie eine ACL, die Konflikte verursacht. – Gary

Antwort

0

EPERM steht für Error - PERMission: Nodejs darf nicht in die Protokolldatei schreiben. Überprüfen Sie, ob die Anwendung Zugriff auf die Protokolldatei hat und ändern Sie sie, sodass die Knotenanwendung möglicherweise in die Protokolldatei schreibt.

Auf einem Mac können Sie chmod 777 somefile.log tun (beachten Sie, dass dies erlaubt jedem, der Zugriff auf Ihr Dateisystem hat, in die Protokolldatei schreiben).

Wahrscheinlich hat der Windows-Server die Protokolldatei erstellt und der Mac-Server kann nicht darauf zugreifen (weil es nicht der Eigentümer ist und die Schreibberechtigung nicht öffentlich ist).

+0

Wie gesagt, 'lesen/schreiben ist in Ordnung, aber append bekommt EPERM' –

2

Ich würde mit Luc Gendriks gehen. EPERM tritt auf, wenn Sie nicht genügend Berechtigungen für die Datei/haben folder.Try folgende

Code:

fs.chmod('xxx.txt', 777, function(err){ 
    if(err){ 
    console.log(err); 
    return; 
    } 
    fs.appendFileSync('xxx.txt', 'zzzzzzzz'); 
}); 

Referenz:

https://nodejs.org/api/fs.html#fs_fs_chmodsync_path_mode https://nodejs.org/api/fs.html#fs_fs_appendfilesync_file_data_options

Hoffe das hilft.

+0

Das gleiche Ergebnis - EPERM. Unter Windows anhängen ist separate Berechtigung. Wahrscheinlich hat der Knoten einen Fehler, wenn er unter Windows ausgeführt wird, der hfs-drive oder ähnliches verwendet. –

+0

Ich sagte zweimal - lesen, schreiben, löschen - erstellen ist Ok! Nur das Öffnen mit Append schlägt fehl. –

+0

Dies funktioniert nicht unter Windows, wenn appendFile oder appendFileSync verwendet wird. Die Tatsache, dass appendFile und appendFileSync die Datei erstellen, aber nicht in sie schreiben können, ist wahrscheinlich ein Fehler bei NodeJS für ihren Windows-Build. Schade. Sie können File oder appendFileSync an eine lokale temporäre Datei anhängen und sie dann an das gewünschte Ziel kopieren. Trotzdem nicht ideal. – ariestav

1

Kann die Datei von einem anderen Prozess verwendet werden? (Also Zugriff/Operation verweigert)

+0

Nein. Ich habe es mehrmals versucht. –