2012-09-13 46 views
0

我正在尋找某種方式,在ruby代碼中使用它我應該能夠創建一個臨時文件,然後附加一些ruby代碼在那裏,然後將該臨時文件路徑傳遞給jruby -c以檢查是否有任何語法錯誤。使用jruby -c語法檢查檢查ruby/jruby腳本的語法

目前我正嘗試以下方法:

script_file = File.new("#{Rails.root}/test.rb", "w+") 
      script_file.print(content) 
      script_file.close 
command = "#{RUBY_PATH} -C#{Rails.root}/test.rb" 
      eval(command); 
      new_script_file.close 

當我檢查命令變種,它是正確顯示的JRuby -c {ruby文件路徑}。但是當我執行上面的代碼時,出現以下錯誤:

Completed 500 Internal Server Error in 41ms

SyntaxError ((eval):1: dhunknown regexp options - dh):

讓我知道是否有人對此有任何意見。

感謝, 院長

回答

1

EVAL評估字符串作爲Ruby代碼,而不是一個命令行調用: 因爲你的命令是無效的Ruby語法,你得到這個例外。

如果要啓動在Ruby中的命令,你可以使用%×{}或``:

output1 = ls

output2 = %x{ls}

這兩種形式都將返回啓動命令的輸出作爲一個字符串,如果你想處理它。如果你想直接顯示在用戶終端這個輸出,您可以使用系統():

system("ls")

+0

是的,我試過上面的方法也有,但是它並沒有給我上的可變輸出輸出的是未來終端,所以我做了以下更改: command =「#{RUBY_PATH} -c#{Rails.root} /test.rb」 test_output ='#{command} 2>&1' 以這種方式輸出在test_output變量中。 –

+0

這是因爲jruby -c本身將其診斷消息輸出到錯誤流STDERR:默認情況下,所有先前的窗體只捕獲標準輸出(STDOUT)。如果你想直接捕獲錯誤流,你可以使用IO#popen:'IO.popen(command){| f | f.stderr.read}' – Eureka

+0

以前的代碼不起作用:要實現這一點,可以使用Popen3:http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/ – Eureka