【问题标题】:WEBrick errors on ruby 1.8, works fine on ruby 1.9 [closed]ruby 1.8 上的 WEBrick 错误,在 ruby​​ 1.9 上运行良好 [关闭]
【发布时间】: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

标签: ruby webrick


【解决方案1】:

key: value 用于哈希的语法(其中key 是一个符号)是在 Ruby 1.9 中引入的。对于 Ruby 1.8,您需要使用 :key => value 语法:

server = WEBrick::HTTPServer.new(:Port => ARGV.first)

(我认为是:Port)。

【讨论】:

  • 它实际上是这样工作的,不是吗?完全非标准的选项名称。 WebBrick 不是很 Ruby,它仍然是捆绑的,有点令人震惊。那东西太可耻地过时了。
  • 非常感谢!随着您的更改,它现在可以在 ruby​​ 1.8 和 ruby​​ 2.0 上运行。 (是的,它是“端口”,而不是“端口”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 2010-09-06
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
相关资源
最近更新 更多