Leggere un file come sudo da Ruby on Rails
Sorprendentemente non ho trovato nessuno che cercasse di farlo, ecco perché sto facendo questa domanda.
Il fatto è che ho un file, dove sto memorizzando alcuni dati. Voglio avere un'opzione nel mio progetto rails, dove puoi "esportare" alcuni oggetti che sono definiti in questo file.
Questo file appartiene a root, quindi se provo a leggerlo con File.read ("myfile.json") fallisce con questo errore:
#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>
C'è un modo per leggerlo come root? Forse la soluzione è eseguire un "sudo cat myfile.json" come comando da ruby e iniettare il risultato in una variabile?
Il mio obiettivo è inserire il contenuto di questo file all'interno di un altro che l'utente scaricherà, così in seguito potrà caricare questo file e avere tutti gli oggetti di prima. Era strano non vedere più persone che cercavano di farlo, quindi non so se forse sto chiedendo qualcosa di stupido. Non ho trovato nessuna informazione in Google su questo, forse non è possibile aprire un file come sudo con File.open.
Risposte
Un modo semplice per risolverlo rapidamente è cambiare il proprietario del file.
sudo chown $USER myfile.json
Se vuoi accedere a un file, penso che non sia una buona idea dare alla tua applicazione l'accesso sudo. È potenzialmente pericoloso.
Potresti invece cambiare l'autorizzazione sul file, cambiando il proprietario / gruppo per il file.
Qui puoi trovare come convincere l'utente a eseguire l'applicazione.
Questo comando cambierà il proprietario del file
sudo chown <my_user> /opt/rb/etc/cep/state.json
Un'altra opzione è creare un gruppo con il proprietario corrente e l'utente rails e impostare quel gruppo come proprietario:
sudo groupadd mynewgroup
sudo usermod -a -G mynewgroup <my_user>
sudo usermod -a -G mynewgroup <current_user>
sudo chgrp mynewgroup /opt/rb/etc/cep/state.json