1

我想运行一个 ruby​​ 脚本,该脚本将由控制器后的方法调用。执行控制器时,我们知道当前路径位于项目的根目录。

FullScanTest.rb :我想调用的脚本。我可以在 bash shell 中运行以下命令,但不能在 rails ruby​​ 中调用 ./public/ruby_lib/af/FullScanTest.rb -i 172.16.178.178 -s 25_10_1 -f auto 所以我写了一个简单的 ruby​​ 脚本,它只回复一个字符串。它确实有效~ ruby​​ ./public/ruby_lib/af/test.rb 它适用于 bash-shell 和 rails。

那么问题是什么?允许?环境 ?

提前谢谢大家~当我们在 ROR 上调用脚本时,无论如何都会得到错误输出,我认为它没有显示错误消息。

我发现 ruby​​ 脚本在 require 'mechanize' 和 'nokogiri' 处停止。(所以我标记它们〜它们不会在我的应用程序中使用)但是脚本也停止在预期之外的某个地方,是否有任何限制运行脚本?该脚本将运行数小时。我可以ruby ./public/ruby_lib/af/FullScanTest.rb -i 172.16.178.178 -s 25_10_1 -f auto 在prj_root下执行命令

  require 'open-uri'
  require 'rubygems'

  require 'mechanize'

  require 'logger'
  require 'time'
  require 'nokogiri'
  require 'pp'

** 当我通过控制器调用 ruby​​ 脚本时,是否有人显示错误?我很难调试,它没有显示任何信息。**

def aftest

af_lib="./public/ruby_lib/af/"
prog="FullScanTest.rb"
prog2="test.rb"
params="-i 172.16.178.178 -s 25_10_1 -f auto "
cmd = " ruby #{af_lib}#{prog} #{params}  "
@cmd = %x[ echo #{cmd} ]
res1 = %x[ ruby #{af_lib}#{prog} ]
res2 = %x[ ruby #{af_lib}#{prog2} #{params} --force 2>&1 ]
@res1 = "#{res1}"
@res1 = "#{res2}"

end

我使用视图显示输出,但没有显示任何错误

<h1>Af test lala</h1>

<%= form_tag :action => 'update', :id => @some_object %>
<%= form_tag( { :action => :save, }, { :method => :post }) %>
<h2>Command</h2>
<%= @cmd %>
<h2>Results</h2>
<%= @res1 %>
<h3>H3</h3>
<%= @res2 %>
4

1 回答 1

0

你怎么调用脚本。认为有效的脚本和无效的脚本之间的唯一区别是无效的脚本有参数???

你使用系统调用脚本吗?

IE

system("./public/ruby_lib/af/FullScanTest.rb","-i","172.16.178.178","-s","25_10_1","auto")

甚至更好

path = "#{Rails.root}/public/ruby_lib/af/FullScanTest.rb"
system(path,"-i","172.16.178.178","-s","25_10_1","auto")
于 2013-02-20T16:28:11.477 回答