Ruby onRailsからsudoとしてファイルを読み取る
驚いたことに、私はこれをしようとしている人を見つけられませんでした、それが私がこの質問をしている理由です。
物事は私がいくつかのデータを保存しているファイルを持っているということです。Railsプロジェクトに、このファイルで定義されているいくつかのオブジェクトを「エクスポート」できるオプションが必要です。
このファイルはrootに属しているので、File.read( "myfile.json")で読み取ろうとすると、次のエラーで失敗します。
#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>
rootとして読み取る方法はありますか?おそらく解決策は、rubyからのコマンドとして「sudocat myfile.json」を実行し、その結果を変数に挿入することですか?
私の目標は、このファイルの内容を、ユーザーがダウンロードする別のファイル内に配置して、後でこのファイルをアップロードして、以前のすべてのオブジェクトを保持できるようにすることです。これをやろうとしている人が増えないのは奇妙だったので、私が何か愚かなことを求めているのかどうかはわかりません。これに関する情報はグーグルで見つかりませんでした。File.openでsudoとしてファイルを開くことができない可能性があります。
回答
それをすばやく解決する簡単な方法は、ファイルの所有者を変更することです。
sudo chown $USER myfile.json
ファイルにアクセスしたい場合は、アプリケーションにsudoアクセスを許可することはお勧めできません。潜在的に危険です。
代わりに、ファイルの所有者/グループを変更することにより、ファイルのアクセス許可を変更できます。
ここでは、ユーザーにアプリケーションを実行させる方法を見つけることができます。
このコマンドはファイルの所有者を変更します
sudo chown <my_user> /opt/rb/etc/cep/state.json
別のオプションは、現在の所有者とrailsユーザーでグループを作成し、そのグループを所有者として設定することです。
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