无法在远程服务器上的Ruby Controller中执行system()命令

时间:2016-06-08 23:41:56

标签: ruby-on-rails ruby bash shell ruby-on-rails-4

我有一个Ruby控制器方法:

def wayback
 $newvar = "wayback_machine_downloader http://example.com"
 system($newvar)
end

现在,上面的控制器方法就像一个魅力本地运行,即在localhost:3000,但是当我把我的代码放在服务器中时,system($newvar)命令不起作用。我正在使用digitalocean服务器。

2 个答案:

答案 0 :(得分:0)

尽量不要使用像$newvar这样的全局变量。如果你不知道他们做了什么,这些事情可能会导致代码完全混乱。这里system("...")已足够,但您可以做得更好:

system("wayback_machine_downloader", "http://example.com")

这可以避免在处理未转义的命令行参数时可能遇到的任何安全问题。如果您在此接受用户输入,请想象某人可以使用| rm -rf /作为网址。

如果您在执行时遇到问题,请指定可执行文件的完整路径。这避免了处理PATH问题。

答案 1 :(得分:0)

  • 首先,你不应该在那里使用$ global变量。
  • 其次,问题似乎与system()命令无关,而是在其中的内容。尝试使用简单的命令来确保系统命令正常工作

    类似:wget http://example.com

    如果它运行,那么确保库wayback_machine_downloader也安装在服务器上。如果wget不起作用,则可以共享日志错误。测试和识别问题的最简单方法是直接从数字海洋服务器上的终端运行以下命令。

    wayback_machine_downloader http://example.com