Leer un archivo como sudo de Ruby on Rails
Sorprendentemente no encontré a nadie intentando hacer esto, por eso estoy haciendo esta pregunta.
La cosa es que tengo un archivo, donde estoy almacenando algunos datos. Quiero tener una opción en mi proyecto de rieles, donde puede "exportar" algunos objetos que están definidos en este archivo.
Este archivo pertenece a la raíz, así que si trato de leerlo con File.read ("myfile.json") falla con este error:
#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>
¿Hay alguna forma de que pueda leerlo como root? ¿Quizás la solución es ejecutar un "sudo cat myfile.json" como un comando de ruby e inyectar el resultado en una variable?
Mi objetivo es colocar el contenido de este archivo dentro de otro que el usuario descargará, para luego poder subir este archivo y tener todos los objetos de antes. Fue extraño no ver a más personas intentando hacer esto, así que no sé si quizás estoy preguntando algo estúpido. No encontré información en Google sobre esto, tal vez no sea posible abrir un archivo como sudo con File.open.
Respuestas
Una forma sencilla de solucionarlo rápidamente es cambiar el propietario del archivo.
sudo chown $USER myfile.json
Si desea acceder a un archivo, creo que no es una buena idea darle acceso sudo a su aplicación. Es potencialmente peligroso.
En su lugar, puede cambiar el permiso en el archivo, cambiando el propietario / grupo del archivo.
Aquí puede encontrar cómo hacer que el usuario ejecute la aplicación.
Este comando cambiará el propietario del archivo
sudo chown <my_user> /opt/rb/etc/cep/state.json
Otra opción es crear un grupo con el propietario actual y el usuario de rieles y establecer ese grupo como propietario:
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