Capistrano-Puma无法启动Puma服务器

4

问题描述

当我运行bundle exec cap production puma:start时,我得到的回复是Puma已成功启动:

DEBUG [e4382d1e]    * Pruning Bundler environment
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] Puma starting in cluster mode...
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Version 3.0.2 (ruby 2.2.1-p85), codename: Plethora of Penguin Pinatas
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Min threads: 0, max threads: 16
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Environment: staging
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Process workers: 2
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Phased restart available
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Listening on tcp://0.0.0.0:9294
DEBUG [e4382d1e]
DEBUG [e4382d1e]    [2599] * Daemonizing...

然而,

  1. 当我运行 bundle exec cap production puma:status 时,它显示找不到文件 puma.pid,因此我认为 Puma 没有运行,并且确实没有运行,
  2. 在服务器上,curl 0.0.0.0:9294 输出 curl: (7) Failed to connect to 0.0.0.0 port 9294: Connection refused
  3. 服务器上不存在文件 puma.pid,并且
  4. 如果我尝试在服务器上手动启动 Puma,它可以正常工作。

我的设置信息

这是我的 Gemfile 的部分内容:

gem 'puma'

group :development do
  gem 'spring'
  gem 'capistrano', '~> 3.0'
  gem 'capistrano-rails'
  gem 'capistrano-rvm'
  gem 'capistrano3-puma'
end

这是 Capfile 文件:
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rails'
require 'capistrano/rvm'
require 'capistrano/puma'
require 'capistrano/puma/nginx'

这是config/deploy/production.rb文件的内容:
server 'aws', user: 'my-username', roles: %w{app db web}
set :puma_bind, 'tcp://0.0.0.0:9294'

有什么想法吗:

  1. 问题的根本原因是什么?
  2. 如何解决这个问题?

谢谢。

更新:这里是带有Capistrano文件的存储库。我只保留了Capistrano部分(这是一个全新的项目):https://github.com/flyfy1/CodeRead/


从输出来看,似乎puma已经启动了。是否有puma日志可以告诉您为什么它可能在启动后立即停止? - will_in_wi
@will_in_wi 我没有找到任何 Puma 日志.. 但我已经添加了链接到 Capistrano 项目。 - songyy
我在 shared/logs/puma.access.logpuma.error.log 中找到了 Puma 日志。 - Joshua Muheim
2个回答

11

我之前遇到和你相同的问题,成功修复了。当你使用 cap puma:start 命令时,终端会显示以下内容:

I just meet the same problem, and fixed it. When you use cap puma:start, you will see the following sentences in terminal:

 puma:start
      using conf file /your_web_app_path/shared/puma.rb
      01 ~/.rvm/bin/rvm default do bundle exec puma -C /your_web_app_path/shared/puma.rb --daemon

在your_web_app_path/current/路径下执行bundle exec puma -C /your_web_app_path/shared/puma.rb,不要使用deamon选项。

它会告诉你应用程序出了什么问题。对我来说,它告诉我

 No such file or directory @ rb_io_reopen - /my_web_app_path/shared/log/puma_access.log 

2
很棒的答案!展示了如何找到问题的原因。 - rthbound
1
这告诉你出了什么问题,但没有告诉你如何解决它... 你能详细说明一下吗? - Erick Maynard
@Erick Maynard 在我的问题中,只需简单地创建一个文件:/my_web_app_path/shared/log/puma_access.log - dachougui

1

问题

Capistrano-Puma期望特定的共享目录,否则服务器将无法启动。

这些目录是:
tmp/pids
tmp/sockets log

解决方案

在deploy.rb中创建共享目录:

set :linked_dirs, %w(tmp/pids tmp/sockets log)

验证

Cap Puma:start 命令会提示已启动,但不会告诉你是否失败。请使用以下命令进行验证:

cap puma:status

或者

ps -ax | grep puma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接