2012-12-08 31 views
0

這裏的程序(1.rb):儘可能簡單的齒條應用 - >權限錯誤

require 'rack' 

my_rack = lambda { |env| [200, {}, ["Hello. The time is: #{Time.now}"]] } 
handler = Rack::Handler::WEBrick 

handler.run(my_rack, :PORT => 12_500) 

這裏的誤差:

~/ruby_programs$ ruby 1.rb 
[2012-12-07 21:49:09] INFO WEBrick 1.3.1 
[2012-12-07 21:49:09] INFO ruby 1.9.3 (2012-04-20) [x86_64-darwin10.8.0] 
[2012-12-07 21:49:09] WARN TCPServer Error: Permission denied - bind(2) 
[2012-12-07 21:49:09] WARN TCPServer Error: Permission denied - bind(2) 
/Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/utils.rb:85:in `initialize': Permission denied - bind(2) (Errno::EACCES) 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/utils.rb:85:in `new' 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/utils.rb:85:in `block in create_listeners' 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/utils.rb:82:in `each' 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/utils.rb:82:in `create_listeners' 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:82:in `listen' 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:70:in `initialize' 
    from /Users/7stud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:45:in `initialize' 
    from /Users/7stud/.rvm/gems/[email protected]/gems/rack-1.4.1/lib/rack/handler/webrick.rb:10:in `new' 
    from /Users/7stud/.rvm/gems/[email protected]/gems/rack-1.4.1/lib/rack/handler/webrick.rb:10:in `run' 
    from 1.rb:5:in `<main>' 
~/ruby_programs$ 

這裏的線../webrick/utils.rb 85 :

sock = TCPServer.new(ai[3], port) 

如果我更換這1.rb代碼:

require 'socket' 

server = TCPServer.new 12_000 # Server bind to port 2000 

loop do 
    client = server.accept # Wait for a client to connect 
    client.puts "Hello !" 
    client.puts "Time is #{Time.now}" 
    client.close 
end 

我沒有得到任何錯誤,如果我輸入地址:

http://localhost:12000/ 
在我的瀏覽器

,我得到的預期輸出:

Hello ! 
Time is 2012-12-07 18:58:15 -1000 

的權限爲.rvm目錄:

~$ ls -al 
total 208 
... 
drwxr-xr-x 30 7stud staff 1020 Aug 31 11:09 .rvm 
... 

回答

3

選項端口應在PascalCase

require 'rack' 

my_rack = lambda { |env| [200, {}, ["Hello. The time is: #{Time.now}"]] } 
handler = Rack::Handler::WEBrick 

handler.run(my_rack, :Port => 12_500) 
+1

:PORT v。:Port。 AARGH。謝謝!我猜想腳本默認情況下試圖連接到端口80,因此錯誤。 – 7stud