2014-09-17 4 views
1

У меня есть следующий скрипт, который запускает веб-сервер и выполняет команду при получении запроса.Ошибки WEBrick на ruby ​​1.8, работает нормально на ruby ​​1.9

#!/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 

Unfortunatly, мне нужно портировать это работать на Ruby 1.8 (так как скриптовый РВМ работать на распределенных системах является боль).

Когда я пытаюсь запустить скрипт на 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?

Update

Я изменил 'порт' в 'порт'

UPDATE2

, сравнивающие рубинового 1,8 и рубин 1.9 документации для WEBrick, показывает, что не существует параметр порта для нового метода в 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

+2

«Порт: ARGV.first' должен быть« порт: ARGV.first » –

+0

изменен« Порт »на« порт »должен избегать« синтаксической ошибки, неожиданной »: ', ожидая') ''. Проблема сохраняется? –

+0

'do ... end' не может произойти на одной строке. Синтаксис с одной строкой - '{...}' – tadman

ответ

4

Синтаксис key: value для хэшей (где key символ) был введен в Ruby 1.9 , Для Ruby 1.8 нужно использовать :key => value синтаксис:

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

(и я думаю, что это :Port).

+0

Это на самом деле, как это работает, не так ли? Полностью нестандартные имена опций. WebBrick не очень Ruby, и это отчасти шокирует его все еще в комплекте. Эта вещь настолько постыдно устарела. – tadman

+0

Большое вам спасибо! С вашим изменением теперь он работает на рубине 1.8 и рубине 2.0. (И да, это «Порт», а не «порт») – spuder

Смежные вопросы