2017-04-02 140 views
-2

我修改了我的帖子,并设法在此处复制/粘贴代码。我知道这很丑,但真的希望它能帮助找到错误。 错误消息是:“./v_c:2:in‘:未定义的局部变量或方法’主:对象(NameError)”./count:78:语法错误,意外的关键字结束,期待输入结束

#!/usr/bin/env ruby 
  
# 
# This program is used for collecting web server visit information. 
# 
# Author: A. Genius 
# 
  
require 'optparse' 
  
def print_usage 
    puts "USAGE: v_c -d DNS_NAME" 
    exit 
end 


  
# add option switch and handler 
  
options = {} 
  
option_parser = OptionParser.new do |opts| 
    
# DNS_NAME argument 
 options[:dns_name] = nil 
    opts.on('-d', '--dns-name DNS_NAME', 'Specify a DNS NAME') { |dns_name| options[:dns_name] = dns_name } 
    
# HELP argument 
    options[:help] = nil 
    opts.on('-h', '--help', 'Display usage') { |help| options[:help] = help } 
end 
  
option_parser.parse! 
  
# verify arguments 
  
if options[:dns_name] then 
    dns_name = options[:dns_name] 
else 
  puts "Please set a balancer's DNS." 
  print_usage 
  exit 
end 
  
if options[:help] then 
    print_usage 
    exit 
end 
  
# Keep STDOUT 
# orig_stdout = $stdout 
  
# redirect stdout to /dev/null 
# $stdout = File.new('/dev/null', 'w') 
  
    server1_visit_count = 0 
    server2_visit_count = 0 
    server3_visit_count = 0 
    server4_visit_count = 0 
  
# starting to visit load balancing server 
  
puts "Starting to visit load balancing server" 

2000.times do 

# visit load balancer 
# o = "curl #{dns_name}" 

o = "curl -s #{dns_name}" 
if o =~ /server\s*1/i 
    server1_visit_count += 1 
elsif o =~ /server\s*2/i 
    server2_visit_count += 1 
elsif o =~ /server\s*3/i 
    server3_visit_count += 1 
elsif o =~ /server\s*4/i 
    server4_visit_count += 1 
end 

    print "." 
end 

puts 
puts '-------------------------' 
puts ' Summary' 
puts '-------------------------' 
puts "Server1 visit counts : " + server1_visit_count.to_s 
puts "Server2 visit counts : " + server2_visit_count.to_s 
puts "Server3 visit counts : " + server3_visit_count.to_s 
puts "Server4 visit counts : " + server4_visit_count.to_s 
puts "total is: " + (server1_visit_count + server2_visit_count + 

server3_visit_count + server4_visit_count).to_s 
+0

'elsif'是单个关键字,里面没有空格。另外,请发布代码,而不是截图。 – mudasobwa

+0

你在这行'puts'得到的错误总访问次数:“+(server1_visit_count + server2_visit_count + server3_visit_count + server4_visit_count).to_s'? –

+0

您可以将代码复制并粘贴到问题中吗?如果我能够将代码粘贴到我最喜欢的编辑器中并运行它,我会更容易帮助您。 – spickermann

回答

1

哦......串插,再次...更换此线 #o = 'curl #{dns_name}'有:

#o = "curl #{dns_name}" 

我解释了为什么这是下面的问题。

  1. 从编辑器中可以看出end未被识别。也许你之前复制/粘贴了一些代码,并且某些字符(如引号)与编辑器使用的格式不同。所以重写这段简短的和平代码可能会节省您的###。并粘贴什么这里改写:)

  2. elsif写为单个的词,但红宝石大概的理解,因为没有错误我得到了使用它这样..

  3. 字符串插值使用双引号

'curl -s #{dns}'

原本应该:

"curl -s #{dns}"

(期待你真的想输出这是“curl -s #{dns}”)

是问题的其中之一?


我刚把这个粘贴到repl.it中,效果很好。请检查它是否符合你的代码(我已经增值到dns_name变量,因为我没有在我的情况下定义的那样):

dns_name = 10 
10.times do 

# visit load balancer 
#o = "curl #{dns_name}" 

o = "curl -s #{dns_name}" 
if o =~ /server\s*1/i 
    server1_visit_count += 1 
elsif o =~ /server\s*2/i 
    server2_visit_count += 1 
elsif o =~ /server\s*3/i 
    server3_visit_count += 1 
elsif o =~ /server\s*4/i 
    server4_visit_count += 1 
end 

print "." 
end 

尝试复制/粘贴,如果任何错误告诉:

#!/usr/bin/env ruby 
  
# 
# This program is used for collecting web server visit information. 
# 
# Author: A. Genius 
# 
  
require 'optparse' 
  
def print_usage 
    puts "USAGE: v_c -d DNS_NAME" 
    exit 
end 


  
# add option switch and handler 
  
options = {} 
  
option_parser = OptionParser.new do |opts| 
    
# DNS_NAME argument 
 options[:dns_name] = nil 
    opts.on('-d', '--dns-name DNS_NAME', 'Specify a DNS NAME') { |dns_name| options[:dns_name] = dns_name } 
    
# HELP argument 
    options[:help] = nil 
    opts.on('-h', '--help', 'Display usage') { |help| options[:help] = help } 
end 
  
option_parser.parse! 
  
# verify arguments 
  
if options[:dns_name] then 
    dns_name = options[:dns_name] 
else 
  puts "Please set a balancer's DNS." 
  print_usage 
  exit 
end 
  
if options[:help] then 
    print_usage 
    exit 
end 
  
# Keep STDOUT 
# orig_stdout = $stdout 
  
# redirect stdout to /dev/null 
# $stdout = File.new('/dev/null', 'w') 
  
    server1_visit_count = 0 
    server2_visit_count = 0 
    server3_visit_count = 0 
    server4_visit_count = 0 
  
# starting to visit load balancing server 
  
puts "Starting to visit load balancing server" 

2000.times do 

# visit load balancer 
# o = "curl #{dns_name}" 

o = "curl -s #{dns_name}" 
if o =~ /server\s*1/i 
    server1_visit_count += 1 
elsif o =~ /server\s*2/i 
    server2_visit_count += 1 
elsif o =~ /server\s*3/i 
    server3_visit_count += 1 
elsif o =~ /server\s*4/i 
    server4_visit_count += 1 
end 

    print "." 
end 

puts 
puts '-------------------------' 
puts ' Summary' 
puts '-------------------------' 
puts "Server1 visit counts : " + server1_visit_count.to_s 
puts "Server2 visit counts : " + server2_visit_count.to_s 
puts "Server3 visit counts : " + server3_visit_count.to_s 
puts "Server4 visit counts : " + server4_visit_count.to_s 
puts "total is: " + (server1_visit_count + server2_visit_count + server3_visit_count + server4_visit_count).to_s 
+0

它不符合这个条件'如果o =〜/ server \ s * 1/i'以及其他elsif的 –

相关问题