【问题标题】:How to start a minimal ruby app using Puma or Unicorn?如何使用 Puma 或 Unicorn 启动一个最小的 ruby​​ 应用程序?
【发布时间】:2014-04-03 21:59:09
【问题描述】:

我有一个在 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 应用程序的。如何通过这个简单的程序利用这些服务器的多线程功能?

【问题讨论】:

    标签: ruby unicorn thin puma


    【解决方案1】:

    使用sinatra

    所以要一步一步先安装 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 配置为侦听特定端口或使用配置文件执行许多其他操作,请阅读 documentation

    【讨论】:

    • 很晚的后续问题,我有什么办法可以在使用这种方法时为 puma 提供配置选项?例如,我想更改 puma 运行的最小和最大线程数。
    • 是的,您可以拥有配置文件并指定线程端口和所有内容并使用 puma -C config/puma.rb 运行 puma
    • 这是来自文档github.com/puma/puma/blob/master/examples/config.rb的示例配置文件
    • 我使用 sinatra 执行此操作时的问题是,我运行了两层 puma(我使用 puma 命令从命令行启动了一层,然后启动了一层 sinatra)。跨度>
    • 我找到了一个可行的配置,非常感谢您的帮助!
    【解决方案2】:

    一个不需要额外 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,内容如下:

    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 '/path/to/app.ru'
    
    bind 'tcp://127.0.0.1:3000'
    

    并像以前一样运行 puma

    puma -C /path/to/config.rb
    

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

    【讨论】:

      【解决方案3】:

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

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

      在安装 Puma gem 后,您还需要require 'rack/handler/puma'

      【讨论】:

        猜你喜欢
        • 2015-12-02
        • 2016-11-13
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        相关资源
        最近更新 更多