代码之家  ›  专栏  ›  技术社区  ›  Brad

如何使用Puma或Unicorn启动最小的ruby应用程序?

  •  4
  • Brad  · 技术社区  · 11 年前

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

    3 回复  |  直到 11 年前
        1
  •  6
  •   Sam    11 年前

    使用 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

        2
  •  3
  •   Theo    5 年前

    不需要额外宝石的最小示例如下。

    使用单个文件

    创建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 file:创建机架文件 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
    

    然后更新您的 配置.rb ,删除应用程序并链接机架文件:

    rackup '/path/to/app.ru'
    
    bind 'tcp://127.0.0.1:3000'
    

    像以前一样用

    puma-C/path/to/config.rb
    

    这个 example configuration file 因为美洲狮很有帮助。( 使现代化 :不再维护此示例配置文件。作者提到 dsl.rb 相反。)

        3
  •  2
  •   Guss    9 年前

    而不是使用 Rack::Handler::Thin ,您应该可以使用Puma Rack处理器,如下所示:

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

    你也需要 require 'rack/handler/puma' 安装Puma宝石后。