我正在尝试运行df
命令来显示连接到我的服务器的磁盘的统计信息。但是,它始终将磁盘的大小返回为0.如果我在生产环境中的rails控制台中运行相同的命令,则返回磁盘的大小。
以下是我的代码的结构,
class Disk
def self.metrics
`df -h`
end
end
这就是我在控制器中调用它的方式,
class DiskController
def metrics
@metrics = Disk.metrics
end
end
但是当我试图在视图中看到结果时,它总是返回nil。但是,相同的命令在Rails控制台中有效。
我已尝试使用system
,POPEN
,但所有内容都会返回相同的结果。
此外,同样的事情在开发(Mac OSX)中有效,但在生产中却没有(Linux Ubuntu)。
答案 0 :(得分:1)
您的控制台在您已登录的用户下运行。您的Rails应用程序在用户下运行,专用于运行您的Web服务器。我相信在控制器代码中调用whoami
将显示用户名。该用户可能被限制为运行df
命令。虽然不建议这样做,但可能的解决方案是授予此用户执行df
命令的权限(通过/etc/sudoers
。)
df -h
并将输出放在项目树中的某个文本文件中。然后,控制器可能会读取此文件以显示磁盘使用信息。
我知道这些信息可能稍微过时,但由于每个人都可以执行cron工作,比如分钟,这应该是可以接受的。这种方法的优点是Web服务器仍然无法访问系统命令。