标签: puma

如何正确设置 Nginx 以获得最小的 TTFB 延迟?

我有一个在生产环境中的 Nginx 和 Puma 上运行的 Rails 应用程序。

网页加载出现问题(TTBF 延迟),我正在尝试找出原因。

在 Production.log 的后端,我看到我的网页在134 毫秒内渲染得足够快:

Completed 200 OK in 134ms (Views: 49.9ms | ActiveRecord: 29.3ms)
Run Code Online (Sandbox Code Playgroud)

但在浏览器中我看到 TTFB 是311.49ms

在此输入图像描述

我知道设置中可能存在问题,或者进程计数可能不是最佳的,但找不到约 177 毫秒延迟的原因。.将不胜感激。

下面列出了我的 VPS 属性和配置。

环境

  • nginx 1.10.3
  • 美洲狮 3.12.0(导轨 5.2)
  • PostgreSQL
  • 西德克
  • 弹性搜索

VPS 属性

  • Ubuntu 16.04(64 位)
  • 8 核 (2.4 GHz)
  • 16GB 内存。
  • 网络带宽:1000Mbps

nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
  worker_connections 8096;
  multi_accept on;
  use epoll;
}

http {

  # Basic Settings
  sendfile on; …
Run Code Online (Sandbox Code Playgroud)

performance nginx puma ruby-on-rails-5 time-to-first-byte

1
推荐指数
1
解决办法
2万
查看次数

puma 工作人员与单独的 EC2 实例

我来自 Java/Tomcat 堆栈,并且是 RoR 堆栈的新手。我试图了解有关 puma 配置的一些概念。我已经读过这篇这篇,但我仍然不清楚工人术语。

据我所知,工作人员会导致子进程运行 puma。因此,本质上,这允许您在使用多核实例时实现并行性。但是您也可以通过启动尽可能多的 ec2 单核实例来实现相同的目的吗?

另外,如果实例不是多核,那么将工人设置为> 0是否有意义。

这里的任何信息都会对我有很大帮助。谢谢!

ruby ruby-on-rails puma puma-dev

1
推荐指数
1
解决办法
1283
查看次数

在 Mac 上安装 Rails 时出现 Puma 问题

我正在尝试在我的新机器上安装 Rails,但在捆绑时不断收到此错误。

An error occurred while installing puma (4.3.5), and Bundler cannot
continue.
Make sure that `gem install puma -v '4.3.5' --source 'https://rubygems.org/'`
succeeds before bundling.

In Gemfile:
  puma
Run Code Online (Sandbox Code Playgroud)

当我运行时gem install puma -v '4.3.5' --source 'https://rubygems.org/,我收到此错误:


Building native extensions. This could take a while...
ERROR:  Error installing puma:
    ERROR: Failed to build gem native extension.

    current directory: /Users/christopherdavis/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/puma-4.3.5/ext/puma_http11
/Users/christopherdavis/.rbenv/versions/2.7.1/bin/ruby -I /Users/christopherdavis/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0 -r ./siteconf20200829-23175-2h0q0u.rb extconf.rb
checking for BIO_read() in -lcrypto... yes
checking for SSL_CTX_new() in -lssl... yes
checking for …
Run Code Online (Sandbox Code Playgroud)

rubygems ruby-on-rails rbenv puma

1
推荐指数
1
解决办法
1009
查看次数

ActiveRecord::ConnectionTimeoutError: 无法在 5.000 秒内获取数据库连接

我的 Prod 服务器上偶尔会出现此错误。 ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds

我发现数据库的 CPU 使用率不高,但这个错误仍然每天发生一次,也许两次。

美洲狮.rb

threads 2, 100
workers 2
Run Code Online (Sandbox Code Playgroud)

数据库.yml

  pool: 15
Run Code Online (Sandbox Code Playgroud)

红宝石红宝石:2.3

美洲狮

puma (3.11.2)
Run Code Online (Sandbox Code Playgroud)

数据库大小

db.m5.large
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails puma

1
推荐指数
1
解决办法
3016
查看次数

如何保留Ruby on Rails默认信息页面?

我正在寻找一种方法来保留 Ruby on Rails“默认信息页面”。在 Rails 7 中,该页面在中间显示 Rails 徽标,在底部显示 Ruby、Rails 等的版本号。将路由添加到 config/routes.rb 文件后,默认页面将不再显示。我希望它成为我在家进行简单实验项目的索引页。有任何想法吗?也许它与 Puma 网络服务器有关?谢谢!

ruby ruby-on-rails puma

1
推荐指数
1
解决办法
83
查看次数

如何通过设置生产环境在生产模式中使用puma?

我做了一个小的Sinatra应用程序.在我的Gemfile中添加gem 'puma'生产组

group :production do
    gem 'puma'
    gem 'dm-postgres-adapter'
end
Run Code Online (Sandbox Code Playgroud)

我设置了生产模式 config.ru

set :environment, :production
Run Code Online (Sandbox Code Playgroud)

但是在我运行之后,运行backup默认的webrick Web服务器.我怎么解决这个问题?

rack sinatra puma

0
推荐指数
1
解决办法
2315
查看次数

瘦或美洲狮:使用Faye为Rails聊天服务器使用什么?

作为一种学习体验,我正在尝试为Android和iOS构建一个聊天应用程序,允许群聊(如Whatsapp)和Rails中的聊天服务器.经过一番研究后,我决定和Faye一起去,因为它似乎很容易实现.我正在按照这些教程来做到这一点:

对于我的工作栈,我想建立的NginxThinPuma,但我不明白这将是更好,这将是"正确"的方式建立生产聊天服务器.


我知道这个问题可能有点主观,但谷歌搜索/研究过去一周这让我更加矛盾,因为大多数例子都在使用,Thin但大多数文章都喜欢Puma.

如果您能提供您的答案的参考和示例,我将不胜感激.谢谢.

ruby-on-rails nginx thin faye puma

0
推荐指数
1
解决办法
6256
查看次数

Puma:未找到状态文件

我正在尝试使用 Capistrano 部署 Rails 应用程序。我有一个问题bundler: command not found: pumactl,我似乎已经通过将 puma gem 添加到:development组外的 Gemfile 中解决了这个问题。

文件

source 'https://rubygems.org'

gem 'rails', '4.2.0'
gem 'sass-rails', '~> 5.0'
gem 'semantic-ui-sass', github: 'doabit/semantic-ui-sass'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'mongoid'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'prawn-rails', '0.1.1'
gem 'fastimage', '1.6.6'
gem 'mini_magick', '4.0.4'
gem 'carrierwave', '0.10.0'
gem 'puma', '2.11.1'

group :development, :test do
  gem 'capistrano', '3.3.5'
  gem 'capistrano-rvm', …
Run Code Online (Sandbox Code Playgroud)

capistrano ruby-on-rails puma ruby-on-rails-4 capistrano3

0
推荐指数
1
解决办法
2180
查看次数

如何使用SSL HTTPS在Amazon EC2 AWS中保护Nginx前端和Puma后端

我正在尝试将我的网站从http迁移到https。该体系结构是:在Nginx服务器(侦听端口80)上运行的angularJS Webapp前端,它将请求发送到在Puma服务器(侦听端口8080)上运行的Rails API应用。两台服务器都一起位于Amazon EC2实例中。

这是我第一次迁移到HTTPS,我一点也不熟练。读了很多书,我取得了一些进步,但现在我陷入了困境。

我想确认我是正确的方法还是错误的方法。

在这一刻:

  1. 我获得了一个Let's加密证书,安装并更新了我的Nginx服务器。现在,服务器正在侦听443,而SSL正在前端工作。
  2. 我以为足以保护一个站点,但我意识到从前端发送到后端的请求中出现了blocked:mixed-content错误。
  3. 因此,我想我也需要保护后端。(请确认)
  4. 现在(这仅在开发中,而不是在AWS实例中工作)为了保护后端Puma服务器,我采用了一种非常简单的方法:由于Rails API是私有的,因此我创建了一个自签名SSL证书,并仅使用它来启动这样的Puma服务器:

    捆绑执行程序puma -b'ssl://127.0.0.1:3000?key = puma.server.key&cert = puma.server.crt'-e开发-S〜/ puma -C config / puma / development.rb

如前所述,这正在开发中。我的Nginx服务器正在侦听443,并将请求发送到在端口3000侦听的Puma。

  1. 在这一点上,我尝试在EC2生产实例中执行相同的操作。但是在这里,我有堵墙。我刚刚创建了另一个自签名证书,并以相同的方式启动了puma服务器。但是连接被拒绝了。我了解问题是EC2安全规则中的端口3000未打开。我试图同时在HTTPS中打开该端口,但EC2不允许我使用该端口,因为它仅适用于端口443和HTTP,但是由于SSL无效而无法启动服务器。

因此,在这一点上,我想知道我是否采用了正确的方法,但是我只是缺少了一些东西,否则,对于EC2实例来说这是错误的方法,我需要做一些真正不同的事情。注意:我已经阅读了一些有关如何配置Nginx服务器以代理https的内容,但目前还不太了解。我应该这样走吗?

@ffeast回答后的评论和问题:

我了解您的做法。我建议采用第二种方法。但是,我有一些问题:

  1. 我是否可以解决通过这种方法获得的blocked:mixed-content错误?为什么?我的意思是,Rails API请求是否应该更改?注意:目前,在Angular中,我有一些资源可以发送请求,例如:// domain-name:8080 / action,而Puma服务器正在侦听该端口中的请求。我目前没有任何代理通行证。

  2. 我认为您包括连接到Puma套接字的de Nginx配置,我想我需要创建此Puma套接字,我将需要检查如何做。如果您知道包含示例将有帮助。如果使用此套接字配置Puma,是否需要在特定端口中启动Puma?

  3. 我试图理解整个图片,但我仍然困惑:3.1对API的请求(来自Angular Nginx)应该是什么样的?3.2是否应该在特定端口上启动Puma?我不知道套接字方法是否需要... 3.3以及代理传递配置应如何匹配这些请求。

您能否澄清一下可能会更新您的示例?假设目前的请求就像// domain-name:8080 / action

更新 我正在尝试配置Ningx以将请求传递给PUMA套接字(目前正在开发中)。我遇到了错误,请查看一篇新文章以保持此整洁:Nginx代理传递给Rails API

更新2 它正在工作!我的网站安全无误!这是我的配置。

upstream api.development {
    # Path to Puma SOCK file, as defined previously
    server unix:/tmp/puma.sock fail_timeout=0;
}

server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /keys/ssl/development.server.crt;
        ssl_certificate_key  /keys/ssl/development.server.key;

    #    ssl_session_cache    shared:SSL:1m; …
Run Code Online (Sandbox Code Playgroud)

ssl https nginx amazon-ec2 puma

0
推荐指数
1
解决办法
1577
查看次数

无法杀死端口3000上的进程

我似乎无法弄清楚如何杀死这个过程.

我已经知道,我可以,并且一直只是在不同的端口上运行服务器,但这让我感到烦恼,我无法弄清楚这一点.

下面你将首先看到我尝试运行rails时遇到的错误然后我尝试找到PID并杀死所有的错误.

// ? rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.6.2 (ruby 2.2.3-p173), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Exiting
/Users/jrogers2/.rvm/gems/ruby-2.2.3/gems/puma-3.6.2/lib/puma/binder.rb:266:in `initialize': Address already in use - bind(2) for "::1" port 3000 (Errno::EADDRINUSE)
    from /Users/jrogers2/.rvm/gems/ruby-2.2.3/gems/puma-3.6.2/lib/puma/binder.rb:266:in `new'
    from /Users/jrogers2/.rvm/gems/ruby-2.2.3/gems/puma-3.6.2/lib/puma/binder.rb:266:in `add_tcp_listener'
    from /Users/jrogers2/.rvm/gems/ruby-2.2.3/gems/puma-3.6.2/lib/puma/binder.rb:260:in `block in …
Run Code Online (Sandbox Code Playgroud)

unix macos bash ruby-on-rails puma

-1
推荐指数
1
解决办法
1942
查看次数