【问题标题】:Puma::Server::UNPACK_TCP_STATE_FROM_TCP_INFOPuma::Server::UNPACK_TCP_STATE_FROM_TCP_INFO
【发布时间】:2021-05-11 06:25:25
【问题描述】:

我在我的 FreeBSD 服务器上成功安装了一个 rails 应用程序,但是当我测试 rails s -e productionrails s -e development 时,我在发送请求后从 Puma 服务器收到 Read: #<NameError: uninitialized constant Puma::Server::UNPACK_TCP_STATE_FROM_TCP_INFO>

我在某处错过了一步?

PS。我将 Rails6 与 SqlLite3 一起使用

config/puma.rb

# Puma can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers: a minimum and maximum.
# Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record.
#
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count

# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
port        ENV.fetch("PORT") { 3000 }

# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch("RAILS_ENV") { "development" }

# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked web server processes. If using threads and workers together
# the concurrency of the application would be max `threads` * `workers`.
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
# workers ENV.fetch("WEB_CONCURRENCY") { 2 }

# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory.
#
# preload_app!

# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart

【问题讨论】:

  • 我不是彪马专家。但是,您如何“在浏览器中进行查询”。你在导航栏中输入什么网址?它也可以在开发环境中工作吗?
  • 在我从 Puma 获得Read: #<NameError: uninitialized constant Puma::Server::UNPACK_TCP_STATE_FROM_TCP_INFO> 之后,在网址栏浏览器public_ip_server:3000 中。
  • 只是想知道这是否不是生产设置问题。当您使用 rails s 启动 Puma 开发并访问 url localhost:3000 时,Puma 是否返回错误?
  • 在开发环境中我什么都没有,我的浏览器返回一个站点不可用错误并且我的 Puma 服务器没有捕获任何请求
  • “Puma 没有收到任何请求”是什么意思?如果这是本地(开发)localhost:3000 足以在本地查询您的应用程序。我怀疑您的生产设置有问题。此外,如果您的生产设置很好,这可能是套接字的问题,如 Puma 源代码中所示:github.com/puma/puma/blob/master/lib/puma/server.rb#L182 有一些关于它的线程

标签: ruby-on-rails ruby puma


【解决方案1】:

我刚刚制作了似乎有效的猴子补丁。 (这个问题发生在 FreeBSD 上,而不是 Mac OS X 上)

将此内容放在初始化文件中。例如:config/initializers/puma_missing_constant_monkey_patch.rb

Rails.application.config.after_initialize do
  if defined?(::Puma) && !Object.const_defined?('Puma::Server::UNPACK_TCP_STATE_FROM_TCP_INFO')
    ::Puma::Server::UNPACK_TCP_STATE_FROM_TCP_INFO = "C".freeze
  end
end

它只是定义了缺失的常量。我不知道它是否会破坏其他东西。另一方面,Puma 使用了一个未定义的常量。这个常量在 Puma (lib/puma/server.rb) 中的定义是有条件的。

【讨论】:

猜你喜欢
  • 2014-02-08
  • 2016-09-14
  • 2016-05-02
  • 2016-08-06
  • 1970-01-01
  • 2016-07-19
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多