为什么 运行 `rails s` 作为守护进程没有启动 Puma?

How come running `rails s` as daemon doesn't start Puma?

当我 运行 rails s -e production -p 9292 (正常情况)时,我得到:

=> Booting Puma
=> Rails 5.1.1 application starting in production on http://0.0.0.0:9292
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.8.2 (ruby 2.3.0-p0), codename: Sassy Salamander
* Min threads: 5, max threads: 5
* Environment: production
* Listening on tcp://0.0.0.0:9292
Use Ctrl-C to stop

当我 运行 rails s -d -e production -p 9292(作为守护进程)时,我得到:

=> Booting Puma
=> Rails 5.1.1 application starting in production on http://0.0.0.0:9292
=> Run `rails server -h` for more startup options

就是这样。我需要 运行 bundle exec puma -e production -p 9292 --pidfile tmp/pids/puma.pid -d 才能获得第二部分:

Puma starting in single mode...
...

另外,我的 Puma 日志在哪里?我在 log 文件夹中看到空白 production.log,没有其他日志文件。

背景上下文:当我 运行 curl 0.0.0.0:9292 在 运行 将 railspuma 作为守护进程后,我得到错误 An unhandled lowlevel error occurred. The application logs may have details.

啊,Puma 似乎只关心与 capistrano 一起使用时的 RAILS_ENV。您可以使用 RACK_ENV 或 -e 代替吗?这应该有效:

RACK_ENV=production bundle exec puma -p 3000

bundle exec puma -p 3000 -e production

参见 here

希望有所帮助

rails s -e production -p 9292 -d

杀死服务器

杀死cat tmp/pids/server.pid

rails s -e 生产 -p 9292 -d

对于低于 5 的 Puma 版本,我们可以使用 -d 选项在后台启动。

puma -e production -p 4132 -C config/puma.rb -d

但是Puma gem在5以上的版本中不支持-d选项

In version 5.0 the authors of the popular Ruby web server Puma chose to remove the daemonization support from Puma, because the code wasn't wall maintained, and because other and perhaps better options exist (such as systemd, etc), not to mention many people have switched to Kubernetes and Docker, where you want to start all servers on the foreground

您可以使用此 gem 在后台启动。

https://github.com/kigster/puma-daemon

https://rubygems.org/gems/puma-daemon/versions/0.1.2