2016-04-19 7 views
0

dfコマンドを実行して、自分のサーバに接続されているディスクの統計情報を表示しようとしています。ただし、ディスクのサイズは常に0として返されます。本番環境内のレールコンソールで同じコマンドを実行すると、ディスクのサイズが返されます。ここでRailsコントローラ対Railsコンソールでコマンドを実行するときの相違

は、私のコードが構成されている方法です

class Disk 
    def self.metrics 
    `df -h` 
    end 
end 

そして、これは、私はコントローラにそれを呼び出す方法です

class DiskController 
    def metrics 
    @metrics = Disk.metrics 
    end 
end 

しかし、私は結果を見しようとすると、それは常にnilを返します。ビュー。しかし、同じコマンドはRailsコンソールで動作します。

私はsystemPOPENを使用しようとしましたが、すべてが同じ結果を返します。

また、同じことは開発中(Mac OSX)でも動作しません(Linux Ubuntu)。

+0

実稼働マシンに 'df'プログラムがインストールされていますか?時にはこれらのものがあなたの 'ENV ['PATH']'にないので、あなたはそれを綴る必要があります。通常は '/ usr/bin/df'のようなものですが、いくつかの設定でどこが隠れているかも知れません。 – tadman

+0

しかし、同じコマンドはRailsコンソールの同じ環境で動作します。 Ubuntuマシンで 'RAILS_ENV = production rails c'を実行してコマンドを実行します。それですべてが機能します。 –

+0

railsアプリケーションが実行されているユーザーアカウントに問題がある可能性があります。もし 'PATH'のようなあなたの環境変数は、もしそうならば、レールコンソールでは異なる可能性があります。 – edhurtig

答えて

1

ログインしているユーザーの下でコンソールが実行されています。あなたのRailsアプリケーションは、Webサーバーの実行専用のユーザーのもとで実行されています。私はコントローラコード内からwhoamiへの呼び出しがユーザ名を表示すると信じています。このユーザーはdfコマンドを実行するように制限されている可能性があります。これはお勧めしませんが、このユーザーにコマンド(/etc/sudoers経由)の実行を許可するという解決策があります。

私は別のアプローチをとっていきます。私は許可されたユーザーの代わりにdf -hを実行し、プロジェクトツリー内のテキストファイルの中に出力を置くcronジョブを追加します。コントローラは、このファイルを読み取ってディスク使用量情報を表示することがあります。

私は情報が少し古くなっているかもしれないが、1分ごとにcronジョブを実行する可能性があることを理解しています。この方法の利点は、Webサーバーがまだシステムコマンドにアクセスできないことです。

+0

ありがとう。私はちょうどそれを試みたが、残念ながらwhoamiコマンドはコントローラーで試しても何も印刷していません。しかし、コンソールで私は適切なユーザーを取得します。 :( –

関連する問題