2012-09-13 18 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