标签: puma

如何使用Puma配置Rails以使用SSL?

我只发现了如何使用SSL启动puma:

$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'

但是,没有关于如何在文档中包含中间CA证书的说明.有人能指出我正确的方向吗?我正在使用Puma1.6.3

谢谢!

ssl ruby-on-rails puma

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

服务器发送事件和Rails流

我正在尝试使用Rails 4 ActionController::Live和Server Sent Events.我正在使用MRI 2.0.0和Puma.

我可以看到,每个连接的客户端都保持与服务器的活动连接.我想知道是否可以在不保持所有响应流运行的情况下利用SSE.

Puma使用线程管理多个连接,我想cuncurrent连接的数量是有限的.
如果我想支持数以千计的客户注册到我的Rails应用程序进行SSE事件的真实场景,该怎么办?

有什么例子吗?

此外,我通常在nginx反向代理后面运行Rails应用程序服务器.它需要任何特定的设置吗?

ruby ruby-on-rails nginx server-sent-events puma

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

服务器为每个客户端发送事件,Puma,Rails和最大专用线程

我正在使用Redis for我的rails项目订阅频道并在事件发生时发布到这些频道.在客户端,我正在注册与这些频道对应的EventSource.每当服务器上的订阅频道发生事件时,服务器执行SSE写入,以便所有已注册的客户端都接收更新.

现在,与订阅这些通道的每个客户端的服务器连接保持活动状态,即专用于此客户端的服务器线程一直运行,直到客户端断开连接.使用这种方法,如果有1000个并发用户订阅了一个频道,我将打开1000个TCP/IP连接.

我正在使用Puma作为本教程中建议的Web服务器.Puma默认指定16个最大线程.我可以将此限制更改为更高的限制.

我可能不知道我的应用程序中一次可能有多少并发用户,并且不知道最大值是多少.我可以在Puma中指定的线程数.在最坏的情况下,如果专用于每个并发用户的线程数达到为Puma网络服务器指定的线程的最大计数,则应用程序将冻结所有用户,直到其中一个并发用户断开连接.

我很高兴使用Rails实时流,并且服务器在我的rails项目中发送了事件,但是使用这种方法我有可能达到我的Web服务器中指定的最大线程的限制,因此应用程序对所有用户都没有响应,直到其中一个并发用户断开连接.

不确定Puma对于大型并发用户群的典型最大线程数是多少.

我应该考虑其他方法 - 可能是基于ajax的轮询或使用事件驱动的非阻塞I/O模型的Node.js?或者只是运行一些基准来了解我的最大线程数是多少?

concurrency multithreading ruby-on-rails server-sent-events puma

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

如何让systemd用Puma重启Rails App

我一直在努力这一周,现在似乎找不到答案.我已经用Capistrano部署了我的Rails应用程序.我使用Puma作为服务器.

当我部署时,一切正常.问题是让Puma在重启和/或崩溃时启动.

为了获得部署设置,我使用了本教程.我也在使用RVM.我似乎得到的问题是让服务启动Puma.这是我用过的(服务文件):

[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=simple

#User=my-user

WorkingDirectory=/home/my-user/apps/MyApp/current

ExecStart=/home/my-user/apps/MyApp/current/sbin/puma -C /home/my-user/apps/MyApp/shared/puma.rb

Restart=always

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

这不起作用.我开始认为问题是没有为所有用户安装Ruby,所以我为所有用户安装了RVM,但仍然遇到了同样的问题.我的服务器只有root和my-user.

看看Capistrano如何部署,它运行的命令是:cd /home/my-user/apps/MyApp/current && ( RACK_ENV=production /home/my-user/.rvm/bin/rvm default do bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb --daemon ).如果我使用上述命令,我会收到来自Systmd的错误,抱怨缺少参数.所以我用它编写了一个脚本并获得了服务文件来调用这个脚本来启动应用程序.

这也行不通.需要注意的是,如果我调用脚本从任何服务器上的脚本,并启动应用程序,因此其对配置Systemd一个问题,但我无法弄清楚什么是错的,我不知道如何调试它.我在System的网站上看过调试页面,但它对我没有帮助.如果我systemctl status puma.service全部运行它会告诉我该服务处于失败状态,但它没有告诉我如何或为什么.

另外值得注意的是:如果我bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb从我的App文件夹运行它可以正常工作,那么如何使用Systemd服务复制此命令?

linux ruby-on-rails nginx systemd puma

11
推荐指数
2
解决办法
5998
查看次数

Rails服务器启动/停止

要运行Rails服务器,我使用$rails server.它说'停止,点击Ctrl+c'.我用Putty.

问题是:

  1. 我应该始终打开终端吗?因为如果服务器停止,我的网页将无法正常工作.使用Apache我只使用命令apachectl start/stop.

  2. 如果我想使用命令怎么办?我应该停止服务器,使用命令,然后再次运行?因为在同一个终端中,如果服务器运行,我就无法做到.

ruby-on-rails puma

11
推荐指数
2
解决办法
7813
查看次数

如何知道Puma中活动线程的数量

我试图在我的服务器上看到活跃的美洲豹线程数.

我看不透ps:

$ ps aux | grep puma
healthd   2623  0.0  1.8 683168 37700 ?        Ssl  May02   5:38 puma 2.11.1 (tcp://127.0.0.1:22221) [healthd]  
root      8029  0.0  0.1 110460  2184 pts/0    S+   06:34   0:00 grep --color=auto puma
root     18084  0.0  0.1  56836  2664 ?        Ss   May05   0:00 su -s /bin/bash -c puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
webapp   18113  0.0  0.8  83280 17324 ?        Ssl  May05   0:04 puma 2.16.0 (unix:///var/run/puma/my_app.sock) [/]                                                               
webapp   18116  3.5  6.2 784992 128924 ?       Sl   May05 182:35 puma: …
Run Code Online (Sandbox Code Playgroud)

shell monitoring puma

11
推荐指数
2
解决办法
2112
查看次数

为什么我需要与Puma一起使用Nginx?

我正在将Rails应用程序部署到生产环境中.似乎Puma很快并且在Web服务器中处理我想要的许多东西.

我想知道我是否需要打扰Nginx,如果只是使用Puma,我会错过什么?

ruby-on-rails nginx puma

11
推荐指数
2
解决办法
3362
查看次数

您是否正在尝试打开与非 SSL Puma 的 SSL 连接?

在让一个新项目开始工作后,我发现由于某种原因我无法启动我的 Rails 服务器。我不断收到以下错误:

HTTP parse error, malformed request: #<Puma::HttpParserError: Invalid HTTP format, parsing fails. Are you trying to open an SSL connection to a non-SSL Puma?>

puma

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

使用worker启动Puma服务器时出错

我是Rails和Puma的新手,所以这个问题可能因为简单的解决方案而过于愚蠢,如果你认为我做错了什么也请指导我.

我正在尝试为工作人员启动Puma服务器.如果我将工人设置为0

puma -w0
Run Code Online (Sandbox Code Playgroud)

服务器启动完美,但如果我将worker设置为1或更多,则会出现以下错误:

E:\RoR_tryouts\ws_13.11.13\todo>puma -w3
[2120] *** SIGUSR2 not implemented, signal based restart unavailable!
[2120] *** SIGUSR1 not implemented, signal based restart unavailable!
[2120] Puma starting in cluster mode...
[2120] * Version 2.7.1, codename: Earl of Sandwich Partition
[2120] * Min threads: 0, max threads: 16
[2120] * Environment: development
[2120] * Process workers: 3
[2120] * Phased restart available
[2120] * Listening on tcp://0.0.0.0:9292

C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/lib/puma/cluster.rb:229:in `trap': unsupported signal SIGCHLD (ArgumentError)
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/lib/puma/cluster.rb:229:in `run'
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/puma-2.7.1/lib/puma/cli.rb:442:in `run'
        from …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails puma

10
推荐指数
2
解决办法
8192
查看次数

Rails查询执行导致数据库峰值

我的Rails应用程序出现问题,其中一些随机查询需要大约5秒或更长时间才能完成.大多数情况下,查询非常简单(select * from x where id = ?),字段甚至也被编入索引.

以下是有关设置的更多信息:

  • Puma 3.5.0背后的逆转nginx代理
    • 4名工人,每人最少4个,最多8个.
  • Ruby v2.2.3,Rails v4.2.4
  • PostgreSQL 9.4数据库
    • 线程池设置为最多60个连接
  • 用于监控的Appsignal
  • 8GB RAM,4个CPU,SSD.

在查看Appsignal中的查询性能时,我发现了这一点.我注意到大多数查询在几毫秒内完成,然后时不时地,仍然在同一个请求中,有多个查询需要5秒多才能完成.奇怪的是它总是需要5秒.......这是行动中的图片: Appsignal性能

我试过的事情:

  • 增加线程池以确保puma工作线程具有足够的连接对象.
  • 将'reaping_frequency'设置为10s以确保没有使用死连接.
  • 增加美洲狮工人/线程

我在应用程序中注意到这一点,因为有些页面需要很长时间才能加载(我有一个函数调用需要大约1分钟才能完成)并且不知何故这会阻止新的请求.这对我来说很奇怪,因为有4个工作程序,每个工作程序有8个线程= 32个线程可以处理其他请求.

我在上面的图片中对查询进行了解释,这是输出:

Limit  (cost=0.28..8.30 rows=1 width=150)
  ->  Index Scan using index_addresses_on_addressable_id_and_addressable_type on addresses  (cost=0.28..8.30 rows=1 width=150)
        Index Cond: ((addressable_id = 1) AND ((addressable_type)::text = 'University'::text))
        Filter: (deleted_at IS NULL)
Total query runtime: 13 ms
Run Code Online (Sandbox Code Playgroud)

这是地址表的模式:

# Table name: addresses
#
#  id               :integer          not null, primary key
#  street           :string
# …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql multithreading ruby-on-rails puma

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