Lendo um arquivo como sudo do Ruby on Rails
Surpreendentemente, não encontrei ninguém tentando fazer isso, é por isso que estou fazendo esta pergunta.
O problema é que eu tenho um arquivo, onde estou armazenando alguns dados. Quero ter uma opção no meu projeto rails, onde você possa "exportar" alguns objetos que estão definidos neste arquivo.
Este arquivo pertence ao root, portanto, se eu tentar lê-lo com File.read ("myfile.json"), ele falhará com este erro:
#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>
Existe uma maneira de lê-lo como root? Talvez a solução seja executar um "sudo cat myfile.json" como um comando do ruby e injetar o resultado em uma variável?
Meu objetivo é colocar o conteúdo deste arquivo dentro de outro que o usuário irá baixar, para que depois ele possa fazer o upload desse arquivo e ter todos os objetos de antes. Foi estranho não ver mais pessoas tentando fazer isso, então não sei se talvez eu esteja perguntando algo estúpido. Não encontrei nenhuma informação no google sobre isso, talvez não seja possível abrir um arquivo como sudo com File.open.
Respostas
Uma maneira simples de resolver rapidamente é alterar o proprietário do arquivo.
sudo chown $USER myfile.json
Se você deseja acessar um arquivo, acho que não é uma boa ideia conceder acesso sudo ao seu aplicativo. É potencialmente perigoso.
Em vez disso, você pode alterar a permissão do arquivo, alterando o proprietário / grupo do arquivo.
Aqui você pode descobrir como fazer o usuário executar o aplicativo.
Este comando mudará o dono do arquivo
sudo chown <my_user> /opt/rb/etc/cep/state.json
Outra opção é criar um grupo com o proprietário atual e o usuário do rails e definir esse grupo como proprietário:
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