【发布时间】:2014-09-17 20:09:10
【问题描述】:
我有以下脚本,它运行 Web 服务器并在收到请求时执行命令。
#!/usr/bin/env ruby
require 'webrick'
server = WEBrick::HTTPServer.new(port: ARGV.first)
server.mount_proc '/' do |req, res|
r10kstatus = system( "sudo r10k deploy environment -pv warn" )
puts r10kstatus
end
trap 'INT' do server.shutdown end
server.start
不幸的是,我需要将其反向移植以在 ruby 1.8 上工作(因为编写 rvm 脚本以在分布式系统上工作很痛苦)。
当我尝试在 ruby 1.8 上运行脚本时,我收到以下错误:
/usr/bin/r10k_gitlab_webhook:19:in `load': /usr/lib/ruby/gems/1.8/gems/r10k_gitlab_webhook-0.1.0/bin/r10k_gitlab_webhook:4: syntax error, unexpected ':', expecting ')' (SyntaxError)
server = WEBrick::HTTPServer.new(Port: ARGV.first)
^
/usr/lib/ruby/gems/1.8/gems/r10k_gitlab_webhook-0.1.0/bin/r10k_gitlab_webhook:4: syntax error, unexpected ')', expecting $end
from /usr/bin/r10k_gitlab_webhook:19
如何修改此脚本以在 ruby 1.8 上运行?
更新
我已将“端口”更改为“端口”
更新2
比较webrick的ruby 1.8和ruby 1.9文档,发现1.8中没有新方法的端口参数
http://www.ruby-doc.org/stdlib-1.8.7/libdoc/webrick/rdoc/WEBrick/HTTPServer.html#method-c-new
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/webrick/rdoc/WEBrick/HTTPServer.html#method-c-new
我尝试将(Port: ARGV.first) 更改为(port: ARGV.first),但仍然出现相同的错误:
server = WEBrick::HTTPServer.new(port: ARGV.first)
^
r10k_gitlab_webhook_old.rb:4: syntax error, unexpected ')', expecting $end
【问题讨论】:
-
Port: ARGV.first应该是port: ARGV.first -
将
Port更改为port应该避免使用syntax error, unexpected ':', expecting ')'。问题仍然存在? -
do ... end不能出现在一行中。单行语法为{ ... } -
Port: ARGV.first使用 ruby 1.9 哈希语法,在 1.8 中,您需要使用经典的哈希火箭语法::Port => ARGV.first