0

我遇到了一个 WEBrick + Rails 问题,我找不到其他人有同样的问题。

我在我的 Rails 应用程序中运行 WEBrick

$ rvmsudo rails server -p 80

然后我将其分开screen并注销。如果我等几天,WEBrick 会停止服务请求,每次有人尝试加载应用程序时都会给出这个:

ERROR ThreadError: can't create Thread (11)
    /home/pi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:284:in `start'

然后,当我尝试停止服务器并使用 Control-C 重新启动它时,有时它会显示这一点,我必须按两次 Control-C 才能杀死它:

[2013-11-13 21:13:08] ERROR NoMethodError: undefined method `shutdown' for nil:NilClass
    /home/pi/.rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/handler/webrick.rb:25:in `shutdown'

我尝试检查我的服务器是否有足够的资源——大量的 RAM、CPU、磁盘空间、交换空间和网络 I/O 以供备用。一切看起来与 Rails 正常运行时几乎相同(这是一个非常简单的应用程序)。

软件和硬件详细信息:Rails 4.0.1 和 ruby​​ 2.0.0p247(2013-06-27 修订版 41674)[armv6l-linux-eabihf] 在具有最新 Raspbian 的 Raspberry Pi 上运行。

我的应用程序的来源在 GitHub 上。它在http://door.servebeer.com/运行。

在此先感谢您的帮助!

4

1 回答 1

0

我怀疑我正在达到某种与 Pi 资源无关的限制。我注意到,每次我在浏览器中重新加载应用程序时,都会产生三个新的 Ruby 线程。

运行这个类似 forkbomb 的测试,我发现 Pi 上的 Ruby 在给出 ThreadErrors 之前可以运行大约 300 个线程。因此,在每 100 次浏览量之后,服务器将停止提供页面,因为它已达到线程限制。

这似乎是运行 ARM 的问题(可能是 WEBrick 的另一个错误)。当我在 Intel Ubuntu 服务器上使用 Rails 4.0.1 和 Ruby 2.0.0 运行它时,线程并没有保持打开状态。

于 2013-12-13T07:02:44.743 回答