Puma 未定义的局部变量或方法“守护进程”错误

Posted

技术标签:

【中文标题】Puma 未定义的局部变量或方法“守护进程”错误【英文标题】:Puma undefined local variable or method `daemonize' error 【发布时间】:2021-08-16 12:14:30 【问题描述】:

各位,我找不到问题如下:

config/puma.rb:23:in `_load_from': undefined local variable or method `daemonize' for #<Puma::DSL:0x000055596fadb448> (NameError)

这是我的puma.rb

workers 1
threads 1, 6
daemonize true
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env
app_dir = File.expand_path("../..", __FILE__)
tmp_dir = "#app_dir/tmp"
bind "unix:///#tmp_dir/sockets/puma.sock"
pidfile "#tmp_dir/pids/server.pid"
state_path "#tmp_dir/pids/puma.state"

我的环境是:

OS: Ubtuntu 20.04LTS
Ruby: 2.7.2
Rails: 6.0

希望有人能帮帮我,谢谢!

【问题讨论】:

【参考方案1】:

您使用的是 puma 5.X 吗?然后为了使用 systemd/upstart/a 进程管理器而取消了去魔化

https://github.com/puma/puma/pull/2170

还有变更日志: https://github.com/puma/puma/blob/master/History.md#500--2020-09-17 Daemonization has been removed without replacement.

【讨论】:

【参考方案2】:

正如上面nuaky 的回答。 puma 从 5.x 版本开始删除了daemonize,并且不再提供其他功能。

所以我使用linux命令nohup来运行puma作为打击:

$ nohup puma > /tmp/null 2>&1 &

所以,我希望你能和我一起学习。

【讨论】:

【参考方案3】:

如果您使用的是 puma > 5.0

Daemonization 已经去掉,没有替换,供参考click here

您也可以使用puma-daemon

Gemfile

gem 'puma-daemon', require: false
gem 'puma',  '~> 5'
 

/config/puma.rb

require 'puma/daemon'
daemonize

【讨论】:

以上是关于Puma 未定义的局部变量或方法“守护进程”错误的主要内容,如果未能解决你的问题,请参考以下文章

NameError:未定义的局部变量或方法“记录器”

Elastic Beanstalk & Rails - nginx 错误“未定义的局部变量或方法‘location_config_filename’”

JBuilder中未定义的局部变量或方法“json”

Action Mailer NameError:未定义的局部变量或方法“smtp”

控制器中方法的未定义局部变量或方法“env”

使用 -d(守护进程)运行 Rails(Puma)时的 Nginx 502