2013-02-20 41 views
1

我想運行一個ruby腳本,它將被一個控制器的aftest方法調用。 當消除控制時,我們知道當前路徑是項目的根源。無法從Rails調用/運行/執行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上調用腳本時得到錯誤輸出, 我認爲它不顯示錯誤信息。

我發現在需要「機械化」和「引入nokogiri」紅寶石腳本停止。(所以我將其標記〜他們不會在我的應用程序中使用) 但劇本還停留在某處不expectaion, 是運行腳本有沒有限制? 該腳本將運行數小時。 我可以在prj_root執行命令ruby ./public/ruby_lib/af/FullScanTest.rb -i 172.16.178.178 -s 25_10_1 -f auto

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 %> 

回答

0

。看到作品的腳本和腳本之間唯一的區別是,腳本不起作用的事實是自變量?

您是否使用system來調用腳本?

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") 
+0

是的,我確實使用了系統調用腳本,它的工作好!但不能在rails上運行。我寫了一個由控制器調用的簡單ruby腳本。它也行得通〜 – newBike 2013-02-21 00:03:32

+0

仔細看看我原來的帖子,你是否將參數分成了單個參數到系統?如果是這樣,那麼我認爲你現在正進入'預備'問題。服務器上的腳本是否具有運行Web服務器的用戶帳戶的執行權限? – RadBrad 2013-02-21 01:10:26

+0

仍然不起作用,我輸入命令chmod -R 777 * undex prj_root。它仍然沒有工作~~ – newBike 2013-02-21 07:50:08