2015-12-08 14 views
14

L'applicazione deve memorizzare i dati di registro nell'unità di rete. Quando l'unità è ospitata su Windows, tutto è OK. Quando l'unità è ospitata su Mac, lettura/scrittura è OK, ma append ottiene EPERM, quindi il registro non funziona affatto. Il codice è abbastanza banaleEPERM su appendFile sull'unità di rete

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

come aggiungere correttamente i dati? Il file solitamente troppo grande per essere caricato nella memoria.

Aggiornamento: read-write-delete-create è Ok! Solo apertura con append fallisce

+0

Curioso se si è provato fs.appendFile? Probabilmente lo stesso risultato, ma vale la pena provare. – Gary

+0

Qualsiasi aggiunta non riesce. Anche creareWriteStream con il flag 'a'. Tuttavia, la scrittura senza tale flag funziona correttamente –

+0

Hai eseguito ls -le xxx.txt? Potresti avere un ACL che è in conflitto. – Gary

risposta

0

EPERM sta per Error - PERMission: nodejs non è autorizzato a scrivere nel file di log. Verificare se l'applicazione ha accesso al file di registro e modificarlo in modo che l'applicazione del nodo possa scrivere nel file di registro.

Su un Mac, è possibile eseguire chmod 777 somefile.log (si noti che questo ha permesso a chiunque abbia accesso al proprio filesystem di scrivere nel file di registro).

Probabilmente il server Windows ha creato il file di registro e il server mac non è autorizzato ad accedervi (perché non è il proprietario e il permesso di scrittura non è pubblico).

+0

Come ho detto, 'lettura/scrittura è OK, ma append ottiene EPERM' –

2

Vorrei andare con Luc Gendriks. EPERM si verifica quando non si dispone di sufficienti autorizzazioni per il file/folder.Try il seguente

Codice:

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

Riferimento:

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

Spero che questo ti aiuti.

+0

Lo stesso risultato - EPERM. Sotto Windows append è un permesso separato. Probabilmente, il nodo potrebbe avere un bug quando viene eseguito in Windows che utilizza hfs-drive o simili. –

+0

Ho detto due volte: read-write-delete-create è Ok! Solo l'apertura con append fallisce. –

+0

Questo non funziona in Windows quando si utilizza appendFile o appendFileSync. Il fatto che appendFile e appendFileSync possano creare il file, ma non scriverlo è probabilmente un bug con NodeJS per la sua build di Windows. Peccato. È possibile accodare File o appendFileSync a un file temporaneo locale, quindi copiarlo nella destinazione desiderata. Ancora non è l'ideale, però. – ariestav

1

Il file può essere utilizzato da qualche altro processo? (Quindi l'accesso/operazione è negato)

+0

No. Ho provato diverse volte. –