2011-01-27 5 views
14

J'ai installé Sinatra et cela fonctionne mais il utilise le port 4567 par défaut. Je veux qu'il fonctionne sur le port 80.Exécution de Sinatra sur le port 80

Dans un effort pour l'obtenir pour travailler sur le port 80, j'ai essayé ceci:

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

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

get '/' do 
    "Hello World" 
end 

Mais je reçois cette erreur:

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

Tous idée de ce qui se passe?

+2

Puisque vous exécutez Ruby 1.9, notez que vous n'avez plus besoin de 'require 'rubygems''; ils sont inclus dans 1.9 pour vous. Vous n'avez pas non plus besoin de 'webrick', Sinatra le fera comme solution de repli si un meilleur serveur (comme Thin) n'est pas installé. – Phrogz

Répondre

28

Ne peut pas utiliser simplement vous (http://www.sinatrarb.com/configuration.html):

set :port, 80 

Notez que pour lier un socket au port 80, vous aurez besoin d'avoir des privilèges de super-utilisateur.


Et, en passant,

Using Sinatra.default_options to set base configuration items is obsolete

De: http://www.sinatrarb.com/one-oh-faq

+0

Lorsque j'essaie de faire cela: '/home/jason/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/utils.rb:73:in' initialize ': Permission refusée - bind (2) (Errno :: EACCES) ' –

+7

Pour lier n'importe quoi sous le port 1024, vous devez exécuter en tant que root. –

+1

@JasonSwett Cela signifie que vous avez déjà un serveur Web fonctionnant sur le port 80, ou que vous devez exécuter le script en tant que super utilisateur pour pouvoir configurer le port 80. – Phrogz

2

Tout port inférieur à 1024 est pour les processus privilégiés seulement. Vous devez exécuter en tant que root pour exécuter l'application sinatra directement sur 80. Vous pouvez inverser proxy - http://sinatra-book.gittr.com/#deployment.

16

Une autre façon de réponse acceptée

rvmsudo rackup -p 80 

Dans le cas où l'on utilise RVM pour gérer les versions Ruby, vous ne pouvez pas être en mesure d'utiliser sudo que facilement (ou bien aurait besoin de rubis d'installation dans le chemin).

1

Oui, exécuter autre chose que Apache, Nginx, Varnish ou HAProxy ou le port 80 est à mon avis un jeu dangereux. Ces outils sont très bons dans ce qu'ils font. Une configuration de proxy inverse est la voie à suivre.

Questions connexes