4

我有一个在 Thin 上运行的非常基本的 ruby​​ 示例,但我想知道如何翻译这个示例以使用 Unicorn 或 Puma 作为 HTTP 服务器。这是我现在拥有的代码:

require 'rack'

class HelloWorld
  def talk()
    return "Hello World!"
  end
end

class SomeServer
  def start(server_object, port)
    app = proc do |env|
      [ 200, {"Content-Type" => "text/html"}, [server_object.talk()] ]
    end

    Rack::Handler::Thin::run(app, :Port => port)
  end
end

SomeServer.new.start(HelloWorld.new, 3000)

这运行得很好,但我不知道如何使用 Puma 或 Unicorn 让它运行。我为这两者找到的大多数在线文档都是针对 Rails 应用程序的。如何通过这个简单的程序利用这些服务器的多线程功能?

4

3 回答 3

6

使用辛纳屈

所以要一步一步来,首先安装 sinatra 和 puma gems

gem install sinatra

gem install puma

然后创建一个文件 myapp.rb

require 'sinatra'
configure { set :server, :puma }

get '/' do
  "Hello World!"
end

然后运行文件

ruby myapp.rb

默认情况下 sinatra 监听 4567 所以去 localhost:4567 你可以配置 puma 监听特定端口或使用配置文件做很多其他事情阅读文档

于 2014-04-03T23:16:37.323 回答
3

一个不需要额外 gem 的最小示例如下所示。

使用单个文件

创建一个 puma 配置文件config.rb,内容如下:

app do |env|
  body = 'Hello, World!'
  [200, { 'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }, [body]]
end

bind 'tcp://127.0.0.1:3000'

并运行 puma

puma -C /path/to/config.rb

而已。

使用配置和机架文件

在上面的示例中,配置文件包含应用程序本身。将应用程序移动到rackup文件是有意义的: 创建一个app.ru带有以下内容的 rackup 文件:

class HelloWorld
  def call(env)
    body = 'Hello, World!'
   [200, { 'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }, [body]]
  end
end

run HelloWorld.new

然后更新您的config.rb,删除应用程序并链接 rackup 文件:

rackup '/path/to/app.ru'

bind 'tcp://127.0.0.1:3000'

并像以前一样运行 puma

puma -C /path/to/config.rb

puma的示例配置文件很有帮助。(更新:不再维护此示例配置文件。作者参考dsl.rb代替。)

于 2018-09-26T07:34:59.243 回答
2

Rack::Handler::Thin您应该能够使用 Puma Rack 处理程序,而不是使用启动您的应用程序,如下所示:

Rack::Handler::Puma.run(app, :Port =>port)

require 'rack/handler/puma'在安装 Puma gem 之后,您还需要这样做。

于 2016-04-03T15:45:26.340 回答