【问题标题】:How to make Thin run on a different port?如何让 Thin 在不同的端口上运行?
【发布时间】:2012-09-15 14:04:18
【问题描述】:

我有一个非常基本的测试应用。当我执行此命令时,服务器会忽略我指定的端口并在端口 4567 上运行 Thin。为什么我指定的端口会被忽略?

$ruby xxx.rb start -p 8000

== Sinatra/1.3.3 has taken the stage on 4567 for production with backup from Thin
>> Thin web server (v1.4.1 codename Chromeo)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

xxx.rb 文件

require 'Thin'

rackup_file = "config.ru" 

argv = ARGV
argv << ["-R", rackup_file ] unless ARGV.include?("-R")
argv << ["-e", "production"] unless ARGV.include?("-e")

puts argv.flatten

Thin::Runner.new(argv.flatten).run!

config.ru 文件

require 'sinatra'
require 'sinatra/base'

class SingingRain < Sinatra::Base
    get '/' do
        return 'hello'
    end
end

SingingRain.run!

【问题讨论】:

    标签: ruby linux sinatra thin


    【解决方案1】:
    #\ -p 8000
    

    把它放在 config.ru 的顶部

    【讨论】:

    • 这适用于 Sinatra/Thin 通过运行命令“rackup”。完美!
    【解决方案2】:

    你的问题在于这条线:

    SingingRain.run!
    

    这是 Sinatra 的run method,它告诉 Sinatra 启动自己的 Web 服务器,默认情况下在 4567 端口上运行。这是在您的config.ru 文件中,但config.ru 只是Ruby,所以这一行就像在任何其他.rb 文件中一样运行。这就是您看到 Sinatra 在该端口上启动的原因。

    当您使用 CTRL-C 停止此服务器时,Thin 将尝试继续加载 config.ru 文件以确定要运行的应用程序。您实际上并未在 config.ru 中指定应用程序,因此您会看到如下内容:

    ^C>> Stopping ...
    
    == Sinatra has ended his set (crowd applauds)
    /Users/matt/.rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/builder.rb:129:in `to_app': missing run or map statement (RuntimeError)
            from config.ru:1:in `<main>'
            ...
    

    此错误只是告诉您,您实际上并未在配置文件中指定要运行的应用程序。

    代替SingingRain.run!,使用:

    run SingingRain
    

    run 是一个 Rack 方法,用于指定要运行的应用程序。你也可以run SingingRain.new - Sinatra 采取措施让你在这里只使用类本身,或者一个实例。

    现在的输出应该是:

    >> Thin web server (v1.4.1 codename Chromeo)
    >> Maximum connections set to 1024
    >> Listening on 0.0.0.0:8000, CTRL+C to stop
    

    您没有收到 == Sinatra/1.3.2 has taken the stage on 4567 for production with backup from Thin 消息,因为 Sinatra 没有运行其内置服务器,它只是您配置的瘦服务器。

    【讨论】:

    • 有时很难得到像你这样的好答案。谢谢你的世界:)
    • 您的回答对我有用,但我还有另一个问题。现在,当我运行$ ruby thinx.rb start -d 命令时,即使服务器正常启动,我也会得到两个exit 输出。你知道那是什么意思吗?
    • @Arman 抱歉,我不知道你的两个输出发生了什么——这不会发生在我身上。
    【解决方案3】:

    在你的 config.ru 添加

    设置:端口=> 8000

    另外,我强烈建议将 Sinatra 与乘客 + nginx 之类的东西一起使用,这使得部署到生产环境变得轻而易举。但是,如果您要部署到 heroku,则不必担心这一点。

    【讨论】:

    • Thin:Runner 构造函数不是专门解析命令行参数吗? github.com/macournoyer/thin/blob/master/lib/thin/runner.rb
    • 看起来很像,但我不确定当您使用 config.ru 文件时效果如何。如果您没有创建 config.ru 文件并且它只是 .rb Thin 确实接受 -p 参数
    猜你喜欢
    • 2016-03-01
    • 2016-02-27
    • 2015-03-17
    • 2018-01-14
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多