2011-01-27 37 views
14

Tôi đã cài đặt Sinatra và nó hoạt động nhưng nó sử dụng cổng 4567 theo mặc định. Tôi muốn nó chạy trên cổng 80.Chạy Sinatra trên cổng 80

Trong một nỗ lực để làm cho nó hoạt động trên cổng 80, tôi đã cố gắng này:

require 'rubygems' 
require 'rack/handler/webrick' 
require 'sinatra' 

Sinatra::Application.default_options.merge!(
    :run => false, 
    :env => :production, 
    :port => 80 
) 

get '/' do 
    "Hello World" 
end 

Nhưng tôi nhận được lỗi này:

$ ruby -rubygems index.rb 
index.rb:5:in `<main>': undefined method `default_options' for Sinatra::Application:Class (NoMethodError) 

Bất kỳ ý tưởng những gì đang xảy ra?

+2

Vì bạn đang chạy Ruby 1.9, lưu ý rằng bạn không còn cần đến 'require 'rubygems''; chúng được bao gồm trong 1,9 cho bạn. Bạn cũng không cần phải yêu cầu 'webrick', Sinatra sẽ làm điều đó như một dự phòng nếu một máy chủ tốt hơn (như Thin) không được cài đặt. – Phrogz

Trả lời

28

Có thể bạn không chỉ cần sử dụng (http://www.sinatrarb.com/configuration.html):

set :port, 80 

Lưu ý rằng để ràng buộc một socket để cổng 80, bạn sẽ cần phải có quyền superuser.


Và, bằng cách này,

Using Sinatra.default_options to set base configuration items is obsolete

Từ: http://www.sinatrarb.com/one-oh-faq

+0

Khi tôi cố gắng làm điều đó: '/home/jason/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/utils.rb:73:in 'khởi tạo': Quyền bị từ chối - bind (2) (Errno :: EACCES) ' –

+7

Để liên kết với bất kỳ thứ gì bên dưới cổng 1024, bạn cần phải chạy dưới dạng root. –

+1

@JasonSwett Điều đó có nghĩa là bạn đã có một máy chủ web chạy trên cổng 80 hoặc bạn cần chạy tập lệnh dưới dạng siêu người dùng để được phép thiết lập trên cổng 80. – Phrogz

2

Bất kỳ cổng sau 1024 chỉ dành cho các quy trình đặc quyền. Bạn sẽ phải chạy dưới dạng root để chạy ứng dụng sinatra trực tiếp trên 80. Bạn có thể đảo ngược proxy - http://sinatra-book.gittr.com/#deployment.

16

Một cách thay thế để trả lời chấp nhận

rvmsudo rackup -p 80 

Trong trường hợp một là sử dụng RVM để quản lý các phiên bản Ruby, bạn có thể không có khả năng sử dụng sudo mà dễ dàng (hoặc khác sẽ cần phải thiết lập ruby trong đường dẫn).

1

Có, chạy bất kỳ thứ gì khác ngoài Apache, Nginx, Varnish hoặc HAProxy hoặc cổng 80 là trong trò chơi nguy hiểm của tôi. Những công cụ này rất tốt ở những gì họ làm. Một thiết lập proxy ngược lại là con đường để đi.

Các vấn đề liên quan