问题标签 [puma]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5137 浏览

ruby-on-rails - `rails server puma` vs. `puma`

一些指南(示例)推荐这个来启动一个网络服务器

但我总是直接启动puma服务器

通过 启动 puma (或任何其他服务器)时会发生什么特别的事情rails server吗?

0 投票
0 回答
703 浏览

ruby-on-rails - Rails 4 和 Puma 的 SSE 和并发性

我之前试图问过这个问题,但我对我想要找出的内容不够清楚。

我正在为客户构建一个应用程序,他希望用户访问一个页面并在特定时间同时向所有这些用户推送数据。

例如,他可能希望能够在下午 4:15 向他们发送所有相同的链接

无论如何,这似乎是服务器发送事件的完美用例。我对 sse 不太熟悉,但我想我会检查一下。我从这个 railscast 开始:http: //railscasts.com/episodes/401-actioncontroller-live

这似乎表明您需要为页面上的每个新用户建立一个新的并发连接。这个答案似乎证实了:Server Sent Events and Rails Streaming

对于页面上的每个新用户,我是否需要运行一个新线程?新线程和新并发连接一样吗?如果我们有 100,000 个用户,那将是一个疯狂的线程数量。

关于更好的方法的任何建议?

0 投票
4 回答
1344 浏览

ruby-on-rails - 更改密码后用户会话无效,但仅限于多个线程

我的 Rails 4 + Devise 3.2 应用程序中的一项功能遇到了一个奇怪的问题,该功能允许用户通过 AJAX POST 将密码更改为以下操作,该操作源自 Devise wiki Allow users to edit their password似乎在用户更改密码并在以后的一个或多个请求之后,他们被强制注销,并且在重新登录后将继续被强制注销。

此操作实际上在开发中运行良好,但当我运行多线程、多工作 Puma 实例时,它在生产中失败。Unauthorized似乎发生的情况是,用户将保持登录状态,直到他们的请求之一到达不同的线程,然后他们以 401 响应状态注销。如果我使用单个线程和单个工作人员运行 Puma,则不会出现此问题。我似乎允许用户使用多个线程再次保持登录的唯一方法是重新启动服务器(这不是解决方案)。这很奇怪,因为我认为我拥有的会话存储配置会正确处理它。我的config/initializers/session_store.rb文件包含以下内容:

MyApp::Application.config.session_store(ActionDispatch::Session::CacheStore, :expire_after => 3.days)

我的production.rb配置包含:

我正在通过bundle exec puma -p $PORT -C ./config/puma.rb. 我的puma.rb包含:

那么......这里可能出了什么问题?更改密码后,如何在不重新启动服务器的情况下更新所有线程/工作人员的会话?

0 投票
2 回答
319 浏览

sinatra - 鲁比尼乌斯+帕德里诺在生产中?

有人在 Rubinius + Puma 上运行 padrino 吗?如果是,那么它有多稳定?它比 MRI + Thin 更好吗?我正在考虑试一试,但有点担心它的稳定性。

0 投票
3 回答
10573 浏览

ruby-on-rails - 如何使用 Rails 4 同时处理请求?

我正在尝试在 Rails 4 中同时处理多个请求,我可以在 Rails 3 中非常轻松地做到这config.threadsafe!一点Puma

说我有这个控制器

我曾经能够用puma -t 2:16 -p 3000(最少 2 个线程)启动 puma,然后点击index,然后show仍然可以show正确渲染。

在 Rails 4 中,如果我尝试做同样的事情,Puma 现在会锁定index请求并且show永远不会被渲染。当我点击Ctrl-C服务器时,Puma 给了我这个错误:

为了让并发与 Rails 4 一起工作,我在这里缺少什么?config.threadsafe!应该不需要(即使我尝试也没有什么不同)

0 投票
2 回答
981 浏览

mysql - Amazon RDS (Mysql2::Error 110)

在过去的 6 个月里,我有一个 Rails 应用程序在生产中运行,每周部署一次,没有任何问题。

现在,我已经有一个反复出现的问题大约 3 周了,而且它似乎每周都变得更糟。当我的应用程序启动并到达尝试连接数据库的位置时,我收到此错误:

AFAIK,这个错误告诉我我已经达到了 MySQL 的最大连接数限制。

从配置中,我应该能够打开 296 个连接。我的应用程序设置为运行 7 个实例,每个实例的数据库连接池为 5,因此在部署新实例时它不能真正超过 70 个连接。

我从未在 AWS RDS 控制台或SHOW PROCESSLIST命令中看到连接数超过 20。

我认为这与 Rails 或我的应用程序服务器 (Puma) 没有任何关系,因为当问题发生时我无法通过 MySQL 命令行工具进行连接。

有人对 RDS 上的 MySQL 或 MySQL 本身有类似的问题吗?

0 投票
1 回答
10720 浏览

ruby-on-rails - 彪马 / 丢失原木

为什么我在日志中看不到任何 Rails 特定条目?

我在普通的 Debian 机器上使用 Puma 2.7.1 和 Nginx 代理,没什么特别的,通过 RVM 使用 ruby​​ 1.9.3。

我的彪马配置:

我通过以下方式启动 puma:

我懂了:

我跑:

我懂了:

但我没有看到更多日志,没有任何与应用程序相关的内容。

当应用程序引发异常时,我在日志中什么都没有……“tabula rasa”

0 投票
0 回答
1244 浏览

ruby - PUMA(使用多线程)和 MRI/jruby 的线程安全问题

我了解多线程环境中共享状态的基本问题——即使在将 MRI 与 GIL/GVL 一起使用时也是如此。但是我很好奇在考虑 MRI + Puma 与 jruby + Puma 时是否存在不同的问题(假设 Puma 在这两种情况下都配置为使用多个线程)。

此外,在上述情况下,涉及共享状态的关键部分是什么?这在本质上不是请求驱动的程序(比如那些会利用像 Puma 这样的 Web 服务器的程序)中会有什么不同?

感谢您的时间和考虑;任何关于这些主题的良好资源的建议也将不胜感激。

0 投票
1 回答
548 浏览

ruby-on-rails - 如何在 Rails 中发出 HTTP 请求,同时仍然每分钟处理许多请求?

我正在尝试扩展应用服务器以每分钟处理超过 20,000 个请求。

当我对请求进行压力测试时,大多数请求都可以轻松处理 20,000 RPM 或更多。

但是,需要发出外部 HTTP 请求的请求(例如,Facebook 登录)会使服务器陷入爬行状态(3,000 RPM)。

我从概念上理解我当前环境的局限性——3 个负载平衡的服务器,每台服务器有 4 个独角兽工作者,一次只能处理 12 个请求,即使它们都在等待 HTTP 请求。

我有什么选择可以更好地扩展它?我想一次处理更多的连接。

据我了解,可能的解决方案:

  1. 蛮力:使用更多的独角兽工人(即更多的内存)和更多的服务器。

  2. 将所有阻塞操作推入后台/工作进程以释放 Web 进程。客户端将需要定期轮询以查找他们的请求何时完成。

  3. 转移到 Puma 而不是 Unicorn(可能从 MRI 转移到 Rubinius),这样我就可以使用线程而不是进程——这可能(??)提高每个连接的内存使用率,因此允许增加工作人员的数量。

从根本上说,我正在寻找的是:有没有更好的方法来增加单个工作人员可以处理的阻塞/排队请求的数量,以便我可以增加每台服务器的连接数?

例如,我听说过将 Thin 与 EventMachine 结合使用的讨论。这是否开启了 Rails 工作者的可能性,它可以放下当前正在处理的 Web 请求(因为一个正在外部服务器上等待),然后在等待时接收另一个请求?如果是这样,与独角兽和彪马相比,这是一个值得追求的性能途径吗?(它是否强烈依赖于应用程序的运行时活动?)

0 投票
1 回答
643 浏览

ruby - 使用 1 dyno 让 Heroku 保持清醒的最佳方法

在保持 1 dyno 的同时保持 Heroku 应用程序存活的最佳解决方案是什么?

这是一个非常小的应用程序,但与其等待 20 秒来使测功机栩栩如生,不如每隔 30 分钟左右对我的 Heroku 应用程序执行一次 ping 操作以防止它进入睡眠状态,这将是很棒的,它确实如此每隔一小时。

网络上的一些解决方案建议使用“New Relic”,但我想自己问这个问题,看看是否有一个 2014 年的新答案来解决一个亟待解决的问题。

小信息:我正在运行一个中间人应用程序,在 Heroku 上使用 Puma。