【问题标题】:Running Sinatra on port 80在端口 80 上运行 Sinatra
【发布时间】:2011-06-16 19:51:24
【问题描述】:

我安装了 Sinatra,它可以工作,但默认使用端口 4567。我希望它在 80 端口上运行。

为了让它在 80 端口上工作,我尝试了这个:

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

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

get '/' do
  "Hello World"
end

但我收到此错误:

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

知道发生了什么吗?

【问题讨论】:

  • 由于你运行的是Ruby 1.9,注意你不再需要require 'rubygems';它们包含在 1.9 中。你也不需要'webrick',如果没有安装更好的服务器(如 Thin),Sinatra 将作为后备。

标签: ruby sinatra


【解决方案1】:

你不能只使用 (http://www.sinatrarb.com/configuration.html):

set :port, 80

请注意,要将套接字绑定到端口 80,您需要拥有超级用户权限。


顺便说一句,

使用 Sinatra.default_options 设置基本配置项已过时

发件人:http://www.sinatrarb.com/one-oh-faq

【讨论】:

  • 当我尝试这样做时:/home/jason/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/utils.rb:73:in initialize': Permission denied - bind(2) (Errno::EACCES)`
  • 要绑定到端口 1024 以下的任何内容,您需要以 root 身份运行。
  • @JasonSwett 这要么意味着您已经在端口 80 上运行了一个 Web 服务器,要么您需要以超级用户身份运行脚本才能在端口 80 上进行设置。
  • 我已经在端口 80 上运行了 Apache。我想我会再尝试愚蠢的 mod_ruby
  • @Jason:或者干脆停止 apache(如果可以的话)。或者,使用 apache 重写。我曾经在子域上使用过它们(ruby 在端口 18080 上运行):.htaccess 看起来像 RewriteRule ^(.*)$ http://127.0.0.1:18080/$1 [P] [QSA]
【解决方案2】:

接受答案的另一种方式

rvmsudo rackup -p 80

如果使用 RVM 管理 Ruby 版本,您可能无法轻松使用 sudo(否则需要在路径中设置 ruby​​)。

【讨论】:

    【解决方案3】:

    低于 1024 的任何端口仅用于特权进程。您必须以 root 身份运行才能直接在 80 上运行 sinatra 应用程序。您可以反向代理 - http://sinatra-book.gittr.com/#deployment

    【讨论】:

      【解决方案4】:

      是的,在我看来,运行 Apache、Nginx、Varnish 或 HAProxy 或端口 80 以外的任何东西都是危险的游戏。这些工具非常擅长它们的工作。反向代理设置是可行的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 2011-08-31
        • 2012-08-22
        • 2023-03-28
        • 2019-02-16
        • 2013-10-02
        • 2021-06-05
        相关资源
        最近更新 更多