MongoDB è uno dei più famosi e, permettetemi, gettonati engine NoSQL ad oggi presente nel panorama. La sua diffusione si deve anche alla facilità di installazione e gestione sui vari sistemi. In qualsiasi modo abbiate installato MongoDB, con brew o direttamente compilando i sorgenti, spesso ci troviamo ad un problema relativo alla directory dove MongoDB conserva i documents. All’esecuzione del comando mongod che avvia l’engine, potremmo trovarci un errore simile:
$ mongod 2017-07-13T10:52:50.049+0200 I CONTROL [initandlisten] MongoDB starting : pid=7675 port=27017 dbpath=/data/db 64-bit host=iMac-di-Luca.lan 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] db version v3.4.6 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] git version: c55eb86ef46ee7aede3b1e2a5d184a7df4bfb5b5 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2l 25 May 2017 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] allocator: system 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] modules: none 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] build environment: 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] distarch: x86_64 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] target_arch: x86_64 2017-07-13T10:52:50.050+0200 I CONTROL [initandlisten] options: {} 2017-07-13T10:52:50.077+0200 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating 2017-07-13T10:52:50.077+0200 I NETWORK [initandlisten] shutdown: going to close listening sockets... 2017-07-13T10:52:50.077+0200 I NETWORK [initandlisten] shutdown: going to flush diaglog... 2017-07-13T10:52:50.077+0200 I CONTROL [initandlisten] now exiting 2017-07-13T10:52:50.077+0200 I CONTROL [initandlisten] shutting down with code:100
Il sistema, in due parole, ci sta dicendo che la directory /data/db non esiste. Di default, MongoDB conserva qui i dati e per questo dobbiamo crearla. Vediamo come:
$ sudo mkdir -p /data/db
Attenzione a due cose, primo, lanciarla con i permessi di root (usando sudo ) e, secondo, far cominciare il percorso con /, quindi alla radice del nostro sistema.
Gestire i permessi di /data/db
A questo punto, rilanciando il comando mongod , potremmo trovarci difronte ad un nuovo problema: i permessi della cartella /data/db:
I STORAGE [initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
Quello che dobbiamo fare è accertarci che l’utente di sistema abbia i permessi di lettura e scrittura sulla directory. Per farlo, possiamo lanciare questi comando:
$ whoami lucamurante
Per prima cosa, controlliamo quale utente è attualmente in uso In questo caso, lucamurante. Successivamente lo assegniamo come proprietario della directory /data/db.
$ sudo chown lucamurante /data/db
Fatto. A questo punto, lanciamo nuovamente il comando mongod , che dovrebbe partire senza problemi.